我们在做项目的时候经常会遇到一些需求,
1、比如或者获取当天的结束时间23:59:59,
2、当点的开始时间
3、最近一周的时间
4、本周开始结束的时间
5、当月开始结束时间
6、当年开始结束时间
7、格式化标准时间
等等,现在自己花了点时间封装了一个小的插件date.js专门处理这种需求,满足常见的日期处理功能使用。由于本人水平有限,如果有什么写的不对的地方望各位大神多多指点~!
github地址:date.js
运行结果如下:
核心代码:
(function (w) {
// isFormat 表示是否格式化时间格式,,默认为格式化
function $Date(isFormat = true) {
// 格式化日期 前台传值方式 引用类.dateFormat(1402233166999,"yyyy-MM-dd hh:mm:ss")
this.dateFormat = function (date, fmt = 'yyyy-MM-dd hh:mm:ss') {
let getDate = new Date(date);
let o = {
'M+': getDate.getMonth() + 1,
'd+': getDate.getDate(),
'h+': getDate.getHours(),
'm+': getDate.getMinutes(),
's+': getDate.getSeconds(),
'q+': Math.floor((getDate.getMonth() + 3) / 3),
'S': getDate.getMilliseconds()
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (let k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
}
}
return fmt;
}
// 当前日期时间
this.now = isFormat ? this.dateFormat(new Date()) : new Date();
// 当前日期
this.date = this.dateFormat(new Date()).split(' ')[0];
// 当前时间
this.time = this.dateFormat(new Date()).split(' ')[1];
// 当前月
this.month = new Date().getMonth() + 1;
// 当前消失
this.hours = new Date().getHours();
// 当前月天数
this.monthDays = (() => {
let nowMonth = new Date().getMonth(); // 当前月
let nowYear = new Date().getYear(); // 当前年
let monthStartDate = new Date(nowYear, nowMonth, 1);
let monthEndDate = new Date(nowYear, nowMonth + 1, 1);
let days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
return days;
})();
// 本周的开始日期和结束日日期
this.endDayOfWeek = (() => {
let nowMonth = new Date().getMonth(); // 当前月
let nowDay = new Date().getDate(); // 当前日
let nowDayOfWeek = new Date().getDay(); // 今天本周的第几天
let day = nowDayOfWeek || 7;
const start = new Date(new Date().getFullYear(), nowMonth, nowDay - day + 1);
const starts = new Date(new Date().getFullYear(), nowMonth, nowDay - day + 1);
const end = new Date(new Date().getFullYear(), nowMonth, nowDay + 7 - day);
const ends = new Date(new Date().getFullYear(), nowMonth, nowDay + 7 - day);
starts.setHours(23);
starts.setMinutes(59);
starts.setSeconds(59);
ends.setHours(23);
ends.setMinutes(59);
ends.setSeconds(59);
const firstDay = isFormat ? this.dateFormat(start) : start;
const firstDays = isFormat ? this.dateFormat(starts) : starts;
const lastDay = isFormat ? this.dateFormat(end) : end;
const lastDays = isFormat ? this.dateFormat(ends) : ends;
return {
firstDay,
firstDays,
lastDay,
lastDays,
};
})();
// 当天开始时间
this.todayBegin = (() => {
const now = new Date();
now.setHours(0);
now.setMinutes(0);
now.setSeconds(0);
return isFormat ? this.dateFormat(now) : now;
})();
// 当天59时59分59秒
this.todayEnd = (() => {
const now = new Date();
now.setHours(23);
now.setMinutes(59);
now.setSeconds(59);
return isFormat ? this.dateFormat(now) : now;
})();
// 指定月的最后第一天和最后一天
this.getNowTheMothEnd = (M) => {
if (typeof M !== 'number') {
throw new Error('输入数字');
}
if (M < 0 || M > 12) {
console.error('日期大于1小于12');
return false;
}
const now = new Date();
y = now.getFullYear();
m = M - 1;
const firstDay = new Date(y, m, 1);
const firstDays = new Date(y, m, 1);
firstDays.setHours(23);
firstDays.setMinutes(59);
firstDays.setSeconds(59);
const lastDay = new Date(y, m + 1, 0);
const lastDays = new Date(y, m + 1, 0);
lastDays.setHours(23);
lastDays.setMinutes(59);
lastDays.setSeconds(59);
return {
firstDay: isFormat ? this.dateFormat(firstDay) : firstDay,
firstDays: isFormat ? this.dateFormat(firstDays) : firstDays,
lastDay: isFormat ? this.dateFormat(lastDay) : lastDay,
lastDays: isFormat ? this.dateFormat(lastDays) : lastDays
};
};
// 当月的最后第一天和最后一天
this.nowMothEnd = (() => {
const now = new Date();
y = now.getFullYear();
m = now.getMonth();
const firstDay = new Date(y, m, 1);
const firstDays = new Date(y, m, 1);
firstDays.setHours(23);
firstDays.setMinutes(59);
firstDays.setSeconds(59);
const lastDay = new Date(y, m + 1, 0);
const lastDays = new Date(y, m + 1, 0);
lastDays.setHours(23);
lastDays.setMinutes(59);
lastDays.setSeconds(59);
return {
firstDay: isFormat ? this.dateFormat(firstDay) : firstDay,
firstDays: isFormat ? this.dateFormat(firstDays) : firstDays,
lastDay: isFormat ? this.dateFormat(lastDay) : lastDay,
lastDays: isFormat ? this.dateFormat(lastDays) : lastDays
};
})();
// 今年的第一天和今年的最后一天
this.nowYearsEnd = (() => {
const now = new Date();
y = now.getFullYear();
m = now.getMonth();
const firstDay = new Date(y, 0, 1);
const firstDays = new Date(y, 0, 1);
firstDays.setHours(23);
firstDays.setMinutes(59);
firstDays.setSeconds(59);
const lastDay = new Date(y, 12, 0);
const lastDays = new Date(y, 12, 0);
lastDays.setHours(23);
lastDays.setMinutes(59);
lastDays.setSeconds(59);
return {
firstDay: isFormat ? this.dateFormat(firstDay) : firstDay,
firstDays: isFormat ? this.dateFormat(firstDays) : firstDays,
lastDay: isFormat ? this.dateFormat(lastDay) : lastDay,
lastDays: isFormat ? this.dateFormat(lastDays) : lastDays
};
})();
// 指定年的第一天和今年的最后一天
this.nowTheYearsEnd = (Y) => {
const now = new Date();
y = Y;
m = now.getMonth();
const firstDay = new Date(y, 0, 1);
const firstDays = new Date(y, 0, 1);
firstDays.setHours(23);
firstDays.setMinutes(59);
firstDays.setSeconds(59);
const lastDay = new Date(y, 12, 0);
const lastDays = new Date(y, 12, 0);
lastDays.setHours(23);
lastDays.setMinutes(59);
lastDays.setSeconds(59);
return {
firstDay: isFormat ? this.dateFormat(firstDay) : firstDay,
firstDays: isFormat ? this.dateFormat(firstDays) : firstDays,
lastDay: isFormat ? this.dateFormat(lastDay) : lastDay,
lastDays: isFormat ? this.dateFormat(lastDays) : lastDays
};
};
// 当前时间最近前N天
this.getNowBeforeNday = (N) => {
const now = new Date().getTime();
const before = new Date().getTime() - (24 * 60 * 60 * 1000) * N;
return {
now: isFormat ? this.dateFormat(new Date(now)) : new Date(now),
before: isFormat ? this.dateFormat(new Date(before)) : new Date(before)
};
};
// 当前时间后面N天
this.getNowAfterNday = (N) => {
const now = new Date().getTime();
const after = new Date().getTime() + (24 * 60 * 60 * 1000) * N;
return {
now: isFormat ? this.dateFormat(new Date(now)) : new Date(now),
after: isFormat ? this.dateFormat(new Date(after)) : new Date(after)
};
};
}
w.$Date = $Date;
})(window);