JavaScript计算日期间隔以及结果错误(少一天)的解决方法
2015-11-04 15:49
603 查看
下面的代码是之前从网上某个地方COPY下来的,之前一直用着,前段时间DateDiff()方法突然出问题了,输入两个日期2015-10-01 和 2015-10-02之后,计算出来的日期是0!如果只有几天间隔的话都是少一天,更奇怪的是在有一些电脑上时间是对的,有一些电脑上少一天,想了好久也没有想明白,难道哪里出问题了,于是一步一步跟踪,终于问题出现了。
就是下面这句话
乍一看没啥问题,但是在个别电脑上两个日期都是用这个方法之后,比如2015-10-03 和 2015-10-01 计算出来的毫秒数是错的,最后导致计算天数少了一天。
正确的写法应该是下面这样的
再次部署调试之后发现问题解决!
//计算天数差的函数,通用 function DateDiff(sDate1, sDate2) { //sDate1和sDate2是2002-12-18格式 var aDate, oDate1, oDate2, iDays; aDate = sDate1.split("-"); oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]); //转换为12-18-2002格式 aDate = sDate2.split("-"); oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]); iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24); //把相差的毫秒数转换为天数 return iDays; } //比较两个时间大小 function opinionStartTimeEndTime(stratTime, endTime) { var strat = stratTime.split("-"); var end = endTime.split("-"); var sdate = new Date(strat[0], strat[1], strat[2]); var edate = new Date(end[0], end[1], end[2]); if (sdate.getTime() > edate.getTime()) { return false; } return true; }
就是下面这句话
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
乍一看没啥问题,但是在个别电脑上两个日期都是用这个方法之后,比如2015-10-03 和 2015-10-01 计算出来的毫秒数是错的,最后导致计算天数少了一天。
正确的写法应该是下面这样的
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0] + '00:00:00.000' );
再次部署调试之后发现问题解决!
相关文章推荐
- ExtJS 4.2 教程-03:使用Ext.define自定义类
- extjs简单左边树形菜单布局
- chart.js制作折线图
- jsp 缓存设置
- 理解JavaScript的临时包装对象
- 关于ajaxfileupload.js一些问题和上传图片就立即显示图片功能
- JavaScript对象详解
- 一个文本框的随想
- 巧用JSON.stringify()生成漂亮格式的JSON字符串
- 使用JavaScript和CSS实现文本隔行换色的方法
- ie6下使用js替换img标签src属性图片不显示的错误
- js判断只能输入数字和字母
- javascript常用函数(1)
- JS浏览器对象
- 美化过后的json字符串去格式化的方法
- href="javascript:void(0);"
- emberjs学习二(ember-data和localstorage_adapter)
- javascript闭包
- jsp 静态include和动态jsp:include的区别
- Extjs正则表达式