奇怪的Js时间计算方法,跨多个月后出现1天的误差
2013-08-06 11:30
218 查看
在项目中要求用计算两个时间相差的天数,通俗的说就是两个时间 相减,
我的方法 先把两个时间转成相应的毫秒,相减后,再除以(1000 * 60 * 60 * 24) 就可以得到对应天数,但天数会比实际少一天所以需要再加上一天
代码如下
当时测试没有跨好几个月,发现都没有问题,直到测试人员提了BUG然后自己仔细测终于发现了
BUG:开始日期为:06/08/2013 结束日期为:30/11/2013 计算的结果为116
然后将结束日期改为:01/12/2013 计算的结果居然为118,无缘无故的多出来了1天
然后偿试换种写法方法式都是把时间转成毫秒后相减再除(1000 * 60 * 60 * 24) 结果都多了一天,
最后查看了JS 文档才知道原来 Js Moth默认是从0开始的,所以应该把月都减1
如
还有一种用C#代码去算也是可以的代码如下:
我的方法 先把两个时间转成相应的毫秒,相减后,再除以(1000 * 60 * 60 * 24) 就可以得到对应天数,但天数会比实际少一天所以需要再加上一天
代码如下
function DateDiff() { //startTime和endTime是18/12/2002格式 var startTime = $("#<%=txtDepartureDate.ClientID %>").val(); var endTime = $("#<%=txtReturnDate.ClientID %>").val(); var newDate, sDate, eDate, iDays newDate = startTime.split("/") sDate = new Date(aDate[2], aDate[1]-1, aDate[0]) newDate = endTime.split("/") eDate = new Date(aDate[2], aDate[1]-1, aDate[0]) iDays = Math.floor((eDate2 - sDate) / 86400000) alert(iDays+1); }
当时测试没有跨好几个月,发现都没有问题,直到测试人员提了BUG然后自己仔细测终于发现了
BUG:开始日期为:06/08/2013 结束日期为:30/11/2013 计算的结果为116
然后将结束日期改为:01/12/2013 计算的结果居然为118,无缘无故的多出来了1天
然后偿试换种写法方法式都是把时间转成毫秒后相减再除(1000 * 60 * 60 * 24) 结果都多了一天,
最后查看了JS 文档才知道原来 Js Moth默认是从0开始的,所以应该把月都减1
如
Date(aDate[2], aDate[1]-1, aDate[0]) 这样计算就会得到正确的天数
还有一种用C#代码去算也是可以的代码如下:
int nights =0; if (!string.IsNullOrEmpty(startTime) && !string.IsNullOrEmpty(endTime)) { System.TimeSpan td = Convert.ToDateTime(endTime) - Convert.ToDateTime(startTime); nights = td.Days + 1; }
相关文章推荐
- 实现js浮点数加、减、乘、除的精确计算(网上很多文章里的方法是不能解决所有js浮点数计算误差的)
- JS关于根据当前时间计算一周的方法
- JS计算两个时间相差分钟数的方法示例
- JS数字计算精度误差解决方法
- 实现js浮点数加、减、乘、除的精确计算(网上很多文章里的方法是不能解决所有js浮点数计算误差的)
- JS中字符串转换为日期对象的方法JS中如何计算时间,如何比较时间
- Js利用console计算代码运行时间的方法示例
- js数字计算 误差 解决方法
- js javascript 获取各种时间计算方法
- js获取日期、时间、日期常用方法、时间计算并格式化和实现电子表
- js时间比较 js计算时间差的简单实现方法
- js数字计算 误差问题的快速解决方法
- JS数字计算精度误差的解决方法
- js计算时间差通用方法
- C#计算字符串中子串出现次数的另类方法
- Shell时间运算及时间差计算方法
- 处理字符串的一些js/jq方法(去除HTML,去除空格,计算真实长度,截取中英文字符)
- 关于出现"出现了运行时间错误,是否要进行调试"的解决方法
- .Net的计算时间差的方法
- MATLAB中程序运行时间的计算方法