yyyy-mm-dd格式日期相减

in 未归类 with 0 comments, 4901 views

今天碰到了一个日期格式相减得到具体天数的问题,尝试了好些方法,以下是感觉还不错的方案,拿出来与人分享。

因为是字符串,刚开始还想着把月日年分别分开然后相减后再经过一系列转换成最终所需要的天数,但这种想法很快就被我放弃了,因为确实很麻烦。

尝试着换了种思路,先把格式日期转换成对应的js日期对象,然后再进行求天数的计算。这种方法要方便很多,没有太多的情况要我们去考虑。期间也采用过直接new Date('yyyy-mm-dd');这种转换时间的方式,可惜ie7 8就不兼容了,所以采用了以下方案中的月日年分别进行设置的方式。


<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title></title>
	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.js"></script>
	<script type="text/javascript">
		$(function(){
                        //匹配日期的正则,支持闰年和月份天数判断
			var date_reg=/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/; 
			$('#btn').click(function(){
				var sStart_time = $.trim($('#start_time').val());
				var sEnd_time = $.trim($('#end_time').val());
				if(!(sStart_time.match(date_reg)&&sEnd_time.match(date_reg))){
					alert('请正确输入时间格式,例:2013-02-05');
				} else {
					var d1 = new Date();
					var aD1 = sStart_time.split('-');
						d1.setFullYear(aD1[0]);
						d1.setMonth(aD1[1]);
						d1.setDate(aD1[2]);
					var d2 = new Date();
					var aD2 = sEnd_time.split('-');
						d2.setFullYear(aD2[0]);
						d2.setMonth(aD2[1]);
						d2.setDate(aD2[2]); 
					var day_d1 = d1.getTime()/1000/3600/24; 
					var day_d2 = d2.getTime()/1000/3600/24;
					alert('剩于天数为'+(day_d2-day_d1));
				}

			})
		})
	</script>
</head>
<body>
	<input type="text" name="" id="start_time" value="2013-02-26"/> <input type="text" name="" id="end_time" value="2013-03-23" /> <input type="button" value="计算剩于时间" id='btn' />
</body>
</html>


Responses ${replyToWho} / Cancel Reply