奇怪的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 ...
随机推荐
- Third glance in Go
在Go語言裏關於數組(Array),切片(Slice)和映射表(Map)的使用是非常常見的.有過其他語言編程背景的人會比較熟悉一下,但是也是因爲過於的熟悉,從而導致一個慣性思維,往往就會踢到“石頭”, ...
- HTML制作个人简历
简历代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- SQL Server 2012实施与管理实战指南(笔记)——Ch6连接的建立和问题排查
6.连接的建立和问题排查 会话的建立分成2个部分: 1.连接,即找到这个实例 2.认证,告诉sql server谁要连接 目录 6.连接的建立和问题排查 6.1协议选择和别名 6.1.1 服务器网络配 ...
- redis k-v数据库、高速缓存、消息队列代理
Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的 ...
- 【SQL篇章】【SQL语句梳理 :--基于MySQL5.6】【已梳理:ALTER TABLE解析】
ALTER TABLE 解析实例: SQL: 1.增加列 2.增加列,调整列顺序 3.增加索引 4.增加约束 5.增加全文索引FULL-TEXT 6.改变列的默认值 7.改变列名字(类型,顺序) 8. ...
- 【密码】Oracle用户密码系列
[密码]Oracle用户密码系列 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ...
- 用批处理来自动化项目编译及部署(附Demo)
阅读目录 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 介绍 详细 处理 结论 Demo下载 介绍 一个项目从立项开始,可能就已经根据公司的配置模板将 ...
- 烂泥:vcenter通过模板部署vm
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 前一篇文章我们介绍了有关vcenter5.5的安装与配置,这篇文章我们再来介绍下,如何 ...
- ARM 汇编寻址方式
ARM支持9种寻址方式:立即数寻址,寄存器寻址,寄存器偏移寻址,寄存器间接寻址,基址变址寻址,多寄存器寻址,相对寻址,堆栈寻址,块拷贝寻址. 立即数寻址 将数据直接存放的指令中发给CPU,首先由于AR ...
- JavaEE7 HTML5利用WebSocket实现即时通讯
HTML5给Web浏览器带来了全双工TCP连接websocket标准服务器的能力. 换句话说,浏览器能够与服务器建立连接,通过已建立的通信信道来发送和接收数据而不需要由HTTP协议引入额外其他的开销来 ...