Javascript日期操作工具

;(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,日期,DateUtils)