奇怪的Js时间计算方法,跨多个月后出现1天的误差
在项目中要求用计算两个时间相差的天数,通俗的说就是两个时间 相减,
我的方法 先把两个时间转成相应的毫秒,相减后,再除以(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 =;
if (!string.IsNullOrEmpty(startTime) && !string.IsNullOrEmpty(endTime))
{
System.TimeSpan td = Convert.ToDateTime(endTime) - Convert.ToDateTime(startTime);
nights = td.Days + ; }
奇怪的Js时间计算方法,跨多个月后出现1天的误差的更多相关文章
- js时间比较,获取n天后(前)的日期
<html> <head> <meta http-equiv="Content-Type" content="textml; charset ...
- 获取n月后的当前时间
例如用户计算会员的到期日期时间 public static Date getMonthNextOrBeforeDate(int monthNum) { Date dNow = new Date(); ...
- 一个奇怪的JS函数
今天在分析一个jQuery插件源码的时候,发现了一个奇怪的函数. 这个函数的目的是为数字补零,如传入7,输出07,传入12输出12.由于是对时间补零,只截取后两位. // add leading ze ...
- js 时间构造函数
js 时间构造函数,js中没有类似ToString("yyyy-mm-dd HH:mm:ss") 的方法,但是可以用下面的方式来初始化 var cdate = new Date(& ...
- js中各种跨域问题实战小结(二)
这里接上篇:js中各种跨域问题实战小结(一) 后面继续学习的过程中,对上面第一篇有稍作休整.下面继续第二部分: -->5.利用iframe和location.hash -->6.windo ...
- js中各种跨域问题实战小结(一)
什么是跨域?为什么要实现跨域呢? 这是因为JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.也就是说只能访问同一个域中的资源.我觉得这就有必要了解下javascript中的同源策略 ...
- js时间倒计时
看了网上的其他的例子,觉得写的都有点复杂,不好理解,于是自己动手写了个. 本来想封装成jquery插件,但是觉得因为功能很简单,没有必要做成jquery插件,引用的时候不需要引入jqery库,这里直接 ...
- js时间格式转换
在javascript中直接输出Date得到的结果是这样的: function date(){ var date = new Date(); alert(date); } 结果是:Mon Jun 15 ...
- js 时间处理
1.格式化时间 function GetDateTimeFormatter(value) { if (value == undefined) { return &q ...
随机推荐
- BIEE 目录迁移(文件夹)方式
文件夹迁移方式一(归档--取消归档): 归档:analytics中选择目录,定位至指定文件夹,更多中选择归档,保存为 .catalog文档: 释放归档: 进入目录管理器,离线方式登陆, ...
- 【CSharp】C#中equals与==小记
序: 昨天技术群中的一个小伙伴发了几个字符串以及值类型比较的面试题,没想到我们的答案不尽人意...下面是截图以及答案,看看与各位看官的答案是否相同. ...
- JSP在动态网页上输出 三角形和菱形
三角形输出: <% StringBuffer sb1 = new StringBuffer(); ; i <= ; i++){ ; j <= i; j++){ sb1.append( ...
- .NET框架设计(高级框架架构模式)—钝化程序、逻辑冻结、冻结程序的延续、瞬间转移
阅读目录: 1.开篇介绍 2.程序书签(代码书签机制) 2.1ProgramBookmark 实现(使用委托来锚点代码书签) 2.2ProgramBookmarkManager书签管理器(对象化书签集 ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- JVM探索之内存管理(三)
上节我们介绍了JVM垃圾回收的原则,还有几个垃圾收集算法:标记-清除算法.复制算法.标记整理算法.分代收集算法:现在将要说HotSpt的垃圾收集器,这小节将只是理论. Java虚拟机规范对垃圾收集器的 ...
- linux基础-第十单元 系统的初始化和服务
第十单元 系统的初始化和服务 Linux系统引导的顺序 Linux系统引导的顺序 BOIS的初始化和引导加载程序 什么是BIOS GRUB程序和grub.conf文件 什么是grub grub配置文件 ...
- JavaScript日期控件,用select实现
<!doctype html> <html> <head> <title>年月日</title> </head> <bod ...
- 跨应用程序域(AppDomain)的单例(Singleton)实现
转载自: 跨应用程序域(AppDomain)的单例(Singleton)实现 - CorePlex代码库 - CorePlex官方网站,Visual Studio插件,代码大全,代码仓库,代码整理,分 ...
- label的for属性
一.使用介绍 <label>专为input元素服务,为其定义标记. for属性规定label与哪个表单元素绑定 label和表单控件绑定方式又两种: 1.将表单控件作为label的内容,这 ...