/**
-
方法作用:日期工具类
/
var DateUtil = {
/*- 方法作用:【格式化时间】
- 使用方法
- 示例:
-
使用方式一:
-
var now = new Date();
-
var nowStr = now.dateFormat("yyyy-MM-dd hh:mm:ss");
-
使用方式二:
-
new Date().dateFormat("yyyy年MM月dd日");
-
new Date().dateFormat("MM/dd/yyyy");
-
new Date().dateFormat("yyyyMMdd");
-
new Date().dateFormat("yyyy-MM-dd hh:mm:ss");
- @param: format {date} 传入要格式化的日期类型
- @param: time {date} 传入要格式化的日期或者时间戳
- @returns: {2015-01-31 16:30:00}
/
ConvertDateFormat: function(format, time) {
var date;
if (time != undefined) {
if (time.toString().length == 10) {
time = time * 1000;
}
//console.log(“time======” + time);
date = new Date(time);
} else {
date = new Date();
}
var o = {
“M+”: date.getMonth() + 1, //month
“d+”: date.getDate(), //day
“h+”: date.getHours(), //hour
“m+”: date.getMinutes(), //minute
“s+”: date.getSeconds(), //second
“q+”: Math.floor((date.getMonth() + 3) / 3), //quarter
“S”: date.getMilliseconds() //millisecond
}
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (date.getFullYear() + “”).substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + “)”).test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : (“00” + o[k]).substr(("" + o[
k]).length));
}
}
return format;
},
/* - 方法作用:【取传入日期是周几】
- @param: date{date} 传入日期类型
- @returns: {周四,…}
/
ConvertNewWeeks: function(date) {
if (date instanceof Date) {
var dayNames = new Array(“周天”, “周一”, “周二”, “周三”, “周四”, “周五”, “周六”);
return dayNames[date.getDay()];
} else {
return “Param error,date type!”;
}
},
/* - 方法作用:【取传入日期是星期几】
- @param: date{date} 传入日期类型
- @returns:{星期四,…}
/
ConvertWeeks: function(date) {
if (date instanceof Date) {
var dayNames = new Array(“星期天”, “星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六”);
return dayNames[date.getDay()];
} else {
return “Param error,date type!”;
}
},
/* - 方法作用:【日期补0】
- @param: e{date} 传入年|月|日|时|分|秒
- @returns:{01,…}
/
ZeroFill: function(e) {
if (e.toString().length == 1) {
return “0” + e.toString();
}
return e;
},
/* - 方法作用:【获取当前月份的最后一天】
- @param: e{date} 传入当前年的月份
- @returns:{01,…}
/
GetMonthLast: function(time) {
var date = new Date(time);
var year;
var month;
var currentMonth = date.getMonth() + 1;
//console.log(“currentMonth=” + currentMonth);
//console.log(“currentMonth=”+currentMonth);
var nextMonth = ++currentMonth;
//console.log(‘nextMonth=’ + nextMonth);
if (nextMonth > 12) {
year = date.getFullYear() + 1;
month = nextMonth - 12;
} else {
year = date.getFullYear();
month = nextMonth;
}
//console.log(“year+ ‘/’ + month + ‘/’ + ‘01’=” + year + ‘/’ + month + ‘/’ + ‘01’);
var nextMonthFirstDay = new Date(year + ‘/’ + month + ‘/’ + ‘01’).getTime();
//console.log(‘nextMonthFirstDay=’ + JSON.stringify(nextMonthFirstDay));
var oneDay = 1000 * 60 * 60 * 24;
var timestamp = nextMonthFirstDay - oneDay;
var lastDate = DateUtil.ConvertDateFormat(‘dd’, timestamp);
//console.log(“lastDate-====” + lastDate);
return lastDate;
},
/* - 方法作用:【计算2个日期之间的天数】
- 传入格式:new Date(‘yyyy-MM-dd’)
- 使用方法:dateUtil.dayMinus(startDate,endDate);
- @startDate: {Date}起始日期
- @endDate: {Date}结束日期
- @return: endDate - startDate的天数差
/
DayMinus: function(startDate, endDate) {
if (startDate instanceof Date && endDate instanceof Date) {
var days = Math.floor((endDate - startDate) / (1000 * 60 * 60 * 24));
return days;
} else {
return “Param error,date type!”;
}
},
/* - 转换日期(格式化 js最基本的时间格式)
- @param: {时间} date
/
_TransferDate: function(date) {
if (typeof date == “string”) {
return new Date(date.replace(/-/ig, “/”));
} else {
return date;
}
},
/* - 获取两个时间相减的时间
- @param: {时间} date1
- @param: {时间} date2
- @param: {ms|s|m|h|d} type
*/
_Date: function(date1, date2, type) {
var dateTime = DateUtil._NumMillSecond(date1, date2);
switch (type) {
case ‘ms’:
return dateTime;
break;
case ‘s’:
return Math.floor(Number(dateTime) / 1000);
break;
case ‘m’:
return Math.floor(Number(dateTime) / 1000 / 60);
break;
case ‘h’:
return Math.floor(Number(dateTime) / 1000 / 60 / 60);
break;
case ‘D’:
return Math.floor(Number(dateTime) / 1000 / 60 / 60 / 24);
case ‘M’:
return Math.floor(Number(dateTime) / 1000 / 60 / 60 / 24 / 30);
case ‘Y’:
return Math.floor(Number(dateTime) / 1000 / 60 / 60 / 24 / 365);
break;
}
},
/**
- 间隔毫秒
- @param: {时间} date1
- @param: {时间} date2
*/
_NumMillSecond: function(date1, date2) {
var stimes = DateUtil._GetTime(DateUtil._TransferDate(date1));
var etimes = DateUtil._GetTime(DateUtil._TransferDate(date2));
return etimes - stimes;
},
/**
- 某个日期加上多长时间
- @param: {某个日期} date
- @param: {数字} num
- @param: {ms|s|m|h|d} type
/
_plusDate: function(date, num, type, operator) {
var dateTime = DateUtil._GetTime(date);
var lastDay = DateUtil.GetMonthLast(date);
var number;
//console.log(“type====” + type);
switch (type) {
case ‘ms’:
number = Math.floor(num);
break;
case ‘s’:
number = Math.floor(num * 1000);
break;
case ‘m’:
number = Math.floor(num * 1000 * 60);
break;
case ‘h’:
number = Math.floor(num * 1000 * 60 * 60);
break;
case ‘D’:
number = Math.floor(num * 1000 * 60 * 60 * 24);
break;
case ‘M’:
number = Math.floor(num * 1000 * 60 * 60 * 24 * lastDay);
break;
case ‘PY’:
number = Math.floor(num * 1000 * 60 * 60 * 24 * 365);
case ‘RY’:
number = Math.floor(num * 1000 * 60 * 60 * 24 * 366);
break;
}
var rdate
if (operator == ‘加’) {
rdate = dateTime * 1 + number * 1;
} else {
rdate = dateTime * 1 - number * 1;
}
return DateUtil.ConvertDateFormat(‘yyyy-MM-dd hh:mm:ss’, rdate);
},
/* - 某个日期是否晚(小于)于某个日期
- @param: {某个日期} date1
- @param: {某个日期} date2
/
_After: function(date1, date2) {
var stime = DateUtil._GetTime(DateUtil._TransferDate(date1));
var etime = DateUtil._GetTime(DateUtil._TransferDate(date2));
return stime < etime ? true : false;
},
/* - 获取年
- @param: {某个日期} date (不传获取当前时间的年份)
/
GetYear: function(date) {
if (date != undefined) {
return DateUtil._TransferDate(date).getFullYear();
}
return new Date().getFullYear();
},
/* - 获取月
- @param: {某个日期} date (不传获取当前时间的月)
/
GetMonth: function(date) {
if (date != undefined) {
return DateUtil._TransferDate(date).getMonth() + 1;
}
return new Date().getMonth() + 1;
},
/* - 获取日
- @param: {某个日期} date (不传获取当前时间的日)
/
GetDay: function(date) {
if (date != undefined) {
return DateUtil._TransferDate(date).getDay();
}
return new Date().getDay();
},
/* - 获取小时
- @param: {某个日期} date (不传获取当前时间的小时)
/
GetHours: function(date) {
if (date != undefined) {
return DateUtil._TransferDate(date).getHours();
}
return new Date().getHours();
},
/* - 获取分钟
- @param: {某个日期} date (不传获取当前时间的分钟)
/
GetMinutes: function(date) {
if (date != undefined) {
return DateUtil._TransferDate(date).getMinutes();
}
return new Date().getMinutes();
},
/* - 获取秒
- @param: {某个日期} date (不传获取当前时间的秒)
/
GetSeconds: function(date) {
if (date != undefined) {
return DateUtil._TransferDate(date).getSeconds();
}
return new Date().getSeconds();
},
/* - 获取毫秒
- @param: {某个日期} date (不传获取当前时间的毫秒)
/
_GetTime: function(date) {
if (date != undefined) {
return DateUtil._TransferDate(date).getTime();
}
return new Date().getTime();
},
/* - 返回指定长度的月份集合
- @param: {time} 时间
- @param: {len} 长度
- @param: {direction} 方向: 1: 前几个月; 2: 后几个月; 3:前后几个月 默认 3
- @return: {Array} 数组
- @example getMonths(‘2018-1-29’, 6, 1) // -> [“2018-1”, “2017-12”, “2017-11”, “2017-10”, “2017-9”, “2017-8”, “2017-7”]
*/
getMonths(time, len, direction) {
var mm = new Date(time).getMonth(),
yy = new Date(time).getFullYear(),
direction = isNaN(direction) ? 3 : direction,
index = mm;
var cutMonth = function(index) {
if (index <= len && index >= -len) {
return direction === 1 ? formatPre(index).concat(cutMonth(++index)) :
direction === 2 ? formatNext(index).concat(cutMonth(++index)) : formatCurr(index).concat(
cutMonth(++index))
}
return []
}
var formatNext = function(i) {
var y = Math.floor(i / 12),
m = i % 12
return [yy + y + ‘-’ + (m + 1)]
}
var formatPre = function(i) {
var y = Math.ceil(i / 12),
m = i % 12
m = m === 0 ? 12 : m
return [yy - y + ‘-’ + (13 - m)]
}
var formatCurr = function(i) {
var y = Math.floor(i / 12),
yNext = Math.ceil(i / 12),
m = i % 12,
mNext = m === 0 ? 12 : m
return [yy - yNext + ‘-’ + (13 - mNext), yy + y + ‘-’ + (m + 1)]
}
// 数组去重
var unique = function(arr) {
if (Array.hasOwnProperty(‘from’)) {
return Array.from(new Set(arr));
} else {
var n = {},
r = [];
for (var i = 0; i < arr.length; i++) {
if (!n[arr[i]]) {
n[arr[i]] = true;
r.push(arr[i]);
}
}
return r;
}
}
return direction !== 3 ? cutMonth(index) : unique(cutMonth(index).sort(function(t1, t2) {
return new Date(t1).getTime() - new Date(t2).getTime()
}))
}
}