;(function(win, undefined){
// 暴露接口
var DateUtils = win.DateUtils = win.DateUtils || {};
// 各月份总天数
var DAYS_OF_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
/**
* 检测年份是否为闰年
* @param date Date|String|Number
* @return true 参数为Date型且该年份为闰年,或者日期格式字符串所对应日期为闰年,或者数字date为闰年
* false 反之,返回false
*/
DateUtils.isLeap = function(date){
// 若参数为空,则返回false
if(date == null){
return false;
}
// 若参数为字符串,转化为Date型
if(typeof date === 'string'){
date = DateUtils.parse(date);
}
var year = typeof date === 'number' ? date : date.getFullYear();
return (year % 100 != 0 && year % 4 == 0) || year % 400 == 0;
}
/**
* 日期格式化
* @param date 日期
* @param format 格式
* @return Date
*/
DateUtils.format = function(date, format){
if(date == null){
return '';
}
date = DateUtils.parse(date);
format = format || 'yyyy-MM-dd';
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;
}
/**
* 将String或Number或Date转化为Date
* @param date 日期格式字符串或时间戳,字符串应为yyyy-MM-dd或yyyy/MM/dd格式
* @return Date
*/
DateUtils.parse = function(date){
// 参数为时间戳或日期,直接返回日期
if(typeof date === 'number' || date instanceof Date){
return new Date(date);
}
// 字符串日期,将字符串中-替换为/,兼容IE
if(typeof date === 'string'){
try{
return new Date(date.replace(/-/g, '/'));
}catch(e){
throws new Error('参数' + date + '不能转化为正确的日期');
}
}
return null;
}
/**
* 获取指定日期当月天数
* @param date 日期或可以转化为日期的数字或字符串
* @return 日期所在月份的天数
*/
DateUtils.getDaysOfMonth = function(date){
// 将参数转化为日期
date = DateUtils.parse(date);
date.setDate(1);
date.setMonth(date.getMonth() + 1);
date.setDate(0);
return date.getDate();
}
/**
* 获取指定日期当月第一天
* @param date 日期或可以转化为日期的数字或字符串
* @return 日期所在月份的一号
*/
DateUtils.getFirstDateOfMonth = function(date){
date = DateUtils.parse(date);
date.setDate(1);
return date;
}
/**
* 获取指定日期当月最后一天
* @param date 日期或可以转化为日期的数字或字符串
* @return 日期所在月份的最后一天
*/
DateUtils.getLastDateOfMonth = function(date){
date = DateUtils.parse(date);
date.setDate(DateUtils.getDaysOfMonth(date));
return date;
}
/**
* 获取系统时间
* @return 系统时间
*/
DateUtils.now = function(){
return new Date();
}
/**
* 将给定日期加上指定天数
* @param date 日期或可以转化为日期的数字或字符串
* @param days 天数
* @return 增加指定天数后的日期
*/
DateUtils.add = function(date, days){
date = DateUtils.parse(date);
date.setDate(date.getDate() + days);
return date;
}
/**
* 获取给定日期在一年中是第几天
* @param date 日期或可以转化为日期的数字或字符串
* @return 给定日期在当年是第几天
*/
DateUtils.indexOfYear = function(date){
date = DateUtils.parse(date);
// 闰年二月29天
if(DateUtils.isLeap(date)){
DAYS_OF_MONTH[1] = 29;
}
// 计算日期索引
var m = date.getMonth();
var index = 0;
while(m--){
index += DAYS_OF_MONTH[m];
}
return index + date.getDate();
}
})(window);
Javascript日期操作工具
最新推荐文章于 2024-04-07 20:25:47 发布