js date时间操作(二)

     这个在js时间操作(一)里面描述的清楚了,就不多说了,直接上代码,在(一)的基础上增加了几个扩展方法,日期的加减操作,代码如下:

(function(w) {
	var add0 = function(inputIntValue) {
		if (inputIntValue < 10) {
			inputIntValue = "0" + inputIntValue;
			//因 月 日 时  分 秒 会存在只有个位数字,这样加0稍微美观一点
			//用2000-01-01 01:02:02 不会出现 2000-1-1 1:2:2
		}
		return inputIntValue;
	};
	w.dateTool = {
		prettyDateString: function(inputDateString, dateType) {
			if (inputDateString == undefined || inputDateString == null || inputDateString == '') {
				inputDateString = new Date(); //空值则取当前时间
			}
			inputDateString = new Date(inputDateString);
			if (inputDateString == "Invalid Date") { //对时间扩展new Date().toPrettyDateString("yyyy-MM-dd")这里没关系,不会有问题
				inputDateString = new Date(); //但是如果直接用prettyDateString("sdfg")作为函数使用可以对他进行判断验证  	
			}
			var year = inputDateString.getFullYear();
			var month = add0(inputDateString.getMonth() + 1); //month从0开始记所以加1
			var day = add0(inputDateString.getDate());
			var hour = add0(inputDateString.getHours());
			var minute = add0(inputDateString.getMinutes());
			var second = add0(inputDateString.getSeconds());
			var result = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
			if (dateType == null) {
				return result;
			};
			if(typeof dateType!="string"){
				dateType=dateType+"";
			}
			result = dateType.replace(/y{1,4}/, year).replace(/M{1,2}/, month).replace(/d{1,2}/, day).replace(/h{1,2}/, hour).replace(/m{1,2}/, minute).replace(/s{1,2}/, second);
			return result;
		},
		addYear: function(date, count) { //日期年的加减 count正为加,负为减
			var result = new Date(date);
			result.setFullYear(result.getFullYear() + parseInt(count));
			return result;
		},
		addMonth: function(date, count) { //月的加减
			var result = new Date(date);
			var sourceDate = result.getDate();
			result.setMonth(result.getMonth() + parseInt(count));
			if (result.getDate() < sourceDate) {
				result.setMonth(result.getMonth());
				result.setDate(0);
			}
			return result;
		},
		addDay: function(date, count) { //日的加减
			var result = new Date(date);
			result.setDate(result.getDate() + parseInt(count));
			return result;
		},
		addHour: function(date, count) { //小时加减
			var result = new Date(date);
			result.setHours(result.getHours() + parseInt(count));
			return result;
		},
		addMinute: function(date, count) { //分钟加减
			var result = new Date(date);
			result.setMinutes(result.getMinutes() + parseInt(count));
			return result;
		},
		addSecond: function(date, count) { //秒数加减
			var result = new Date(date);
			result.setSeconds(result.getSeconds() + parseInt(count));
			return result;
		}
	};

	Date.prototype.toPrettyDateString = function(dateType) { //时间扩展方法	
		return dateTool.prettyDateString(this, dateType);
	};
	Date.prototype.addYear = function(count) { //扩展加减年
		return dateTool.addYear(this, count);
	};
	Date.prototype.addMonth = function(count) {//扩展加减月
		return dateTool.addMonth(this, count);
	};
	Date.prototype.addDay = function(count) {//扩展加减天
		return dateTool.addDay(this, count);
	};
	Date.prototype.addHour = function(count) {//扩展加减小时
		return dateTool.addHour(this, count);
	};
	Date.prototype.addMinute = function(count) {//扩展加减分钟
		return dateTool.addMinute(this, count);
	};
	Date.prototype.addSecond = function(count) {//扩展加减秒
		return dateTool.addSecond(this, count);
	};
})(window);

   这里值得特别注意的是那个月的加减,js的日期设置当月的天数小于尾数的天数的时候,他会默认以30天处理,

例如: 2016-07-31 12:12:12

	var datestr = new Date("2016-07-31 12:12:12");
            var result = new Date(datestr);
			var sourceDate = result.getDate();
			result.setMonth(result.getMonth() -5); //直接加减月错误,错误操作
			console.log("---------------------------------")			
                        console.log(result.toPrettyDateString("yyyy-MM-dd hh:mm:ss")); //错误结果
            
			console.log(datestr.addMonth(-5).toPrettyDateString())//正确结果
			
			console.log("---------------------------------")

结果如下:

---------------------------------
2016-03-02 12:12:12  //错误结果

2016-02-29 12:12:12  //正确结果
 ---------------------------------


   直接对月进行加减,当出现结果月的天数(结果月16年2月有29天)小于起始时间的天数(起始源时间2016-07-31 12:12:12天数是31)的时候,当减去31天的时候,他会发现多减了,然后就加上31-29=2天,就出现了错误的结果2016-03-02 12:12:12 ,因此,要把错误时间修正过来,所以增加了对月的时间的判断,如下所示:

	addMonth: function(date, count) { //月的加减
			var result = new Date(date);
			var sourceDate = result.getDate();
			result.setMonth(result.getMonth() + parseInt(count));
			if (result.getDate() < sourceDate) {
				result.setMonth(result.getMonth());
				result.setDate(0);
			}
			return result;
		}

     判断月的天数小于起始的天数,然后就取前一个月的最后一天,这才是正确的加减月的结果。

    好了,结束了,有什么不对或者需要优化的地方还请批评指出,我会尽快改正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值