github中有很多非常好用的日期操作库,如moment.js;但是平常的项目用的的方法有限,未免有些冗余,特提取出比较常用的一些方法
有些人可能会觉得Date.prototype.
的方式在方法的扩展中更实用些,确实如此。本中都是单独拉出来的方法,使用者可自行组装。
日期格式化
/** 日期格式化
* @param {Number String Date}
* @param {String} 'YYYY-MM-DD HH:mm:ss EEE' 年(Y)、月(M)、日(D)、12小时(h)、24小时(H)、分(m)、秒(s)、毫秒(S)、周(E)、季度(q)
* @return {String}
* @example XDate.format(new Date(), "YYYY-MM-DD") ==> 2017-08-23
*/
XDate.format = function(date, fmt) {
fmt = fmt || 'YYYY-MM-DD HH:mm:ss';
if (typeof date === 'string') {
date = new Date(date.replace(/-/g, '/'))
}
if (typeof date === 'number') {
date = new Date(date)
}
var o = {
'M+': date.getMonth() + 1,
'D+': date.getDate(),
'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12,
'H+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
'q+': Math.floor((date.getMonth() + 3) / 3),
'S': date.getMilliseconds()
}
var week = {
'0': '\u65e5',
'1': '\u4e00',
'2': '\u4e8c',
'3': '\u4e09',
'4': '\u56db',
'5': '\u4e94',
'6': '\u516d'
}
if (/(Y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
}
if (/(E+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '\u661f\u671f' : '\u5468') : '') + week[date.getDay() + ''])
}
for (var 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;
}
闰年判断
闰年:能被4整除但不能被100整出
/** 判断是否为闰年
* @param {Number} yr
* @return {Boolean}
*/
XDate.isLeapyear = function(yr) {
return (yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0
}
获取某一年份的指定月份的天数
闰年的二月是个特殊值(依赖与isLeapyear函数)
/** 获取某一年份的某一月份的天数
* @param {Number} year
* @param {Number} month
*/
XDate.getMonthDays = function(year, month) {
return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month-1] || (XDate.isLeapyear.call(null, year) ? 29 : 28);
}
获取某个时间前/后的时间
/** 获取某个时间相加/减后的时间
* @param {Date} date
* @param {Number} num 参数为正时时间前移,为负时间后移
* @param {String} type y / m / d / h / m / s / ms
*/
XDate.modify = function (date, num, type) {
date = this.converDate(date);
if (!num) {
return date;
}
switch (type) {
case "y":
date.setFullYear(+date.getFullYear() + num);
break;
case "m":
date.setMonth(+date.getMonth() + num);
break;
case "d":
date.setDate(+date.getDate() + num);
break;
case "h":
date.setHours(+date.getHours() + num);
break;
case "m":
date.setMinutes(+date.getMinutes() + num);
break;
case "s":
date.setSeconds(+date.getSeconds() + num);
break;
case "ms":
date.setMilliseconds(+date.getMilliseconds() + num);
break;
}
return date;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。