Javascript和datediff mysql中日期之间的日期差异不相等
Posted
技术标签:
【中文标题】Javascript和datediff mysql中日期之间的日期差异不相等【英文标题】:Date difference between dates in Javascript and datediff mysql not equal 【发布时间】:2013-09-06 08:19:07 【问题描述】:我有一个 javascript 函数,它返回两个日期之间的天数,但它返回的似乎比 mysql dateDiff 函数返回的天数少
function dateDiffInDays()
var date1 = new Date("05/30/2012");
var date2 = new Date("11/29/2013");
var diffDays = parseInt((date2 - date1) / (1000 * 60 * 60 * 24));
alert(diffDays );
如果我在 mysql 函数中使用这两个日期,我会得到 548,而使用 javascript,我会得到 547,mysql 和 excel 的功能与 javascript 不同
【问题讨论】:
...你确定吗?我在 JS 中得到 548... 哦,你应该明确地在你的date2
和date1
上使用.getTime()
。
我在 javascript 中也得到了 548
是的,我确定,刚刚在在线代码编辑器上尝试过,同样的,547 天
我也得到了 548。jsfiddle.net/hA4y4
【参考方案1】:
由于我们怀疑存在时区问题,您可以尝试以下方法:
function dateDiffInDays()
var date1 = new Date("05/30/2012");
var date2 = new Date("11/29/2013");
var utc1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());
var utc2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());
var diffDays = parseInt((utc2 - utc1) / (1000 * 60 * 60 * 24));
alert(diffDays);
不过,我不确定。从理论上讲,您的函数应该也可以工作。
【讨论】:
好的,这行得通,现在我得到 548,所以这确实是一个时区问题,谢谢伙计 嗯,这很好,但现在我希望有人能向我解释为什么之前的计算失败了,只有 1 小时的差异。有人吗? @Aioros @HoseaKambonde 这两个日期在Daylight Saving Time
中存在差异(带有问题的代码)。我得到548.0416666666666
的结果可能与另一个时区它是547.625
和parseInt
点后的部分被删除(无舍入),所以你有1天的差异,时间差异很小。这应该用这个答案来解决。
你说得对,我一直认为我们正在四舍五入到最接近的整数。谢谢。
两个音符,总是用parseInt
指定一个基数,即使这里不需要(如果你总是这样做,你不会遇到问题),在这里我会用Math.floor
替换parseInt
,因为这反映了它实际做了什么(因为传递给parseInt
的结果是一个浮点数)。【参考方案2】:
他们都返回 548 天:
Javascript
var date1 = new Date("05/30/2012"); var date2 = new Date("11/29/2013"); var diffDays = parseInt((date2 - date1) / (1000 * 60 * 60 * 24));
diffDays 548
MySQL
选择日期差异('2013-11-29','2012-05-30');
548
【讨论】:
【参考方案3】:我从您以前的 javascript 函数中得到 548。但是,如果您的 javascript 和 mysql 之间有 1 个差异,那是因为您的 javascript 计算略有偏差。试试:
function dateDiffInDays()
var date1 = new Date("05/30/2012");
var date2 = new Date("11/29/2013");
var date1days = parseInt(date1 / (1000 * 60 * 60 * 24));
var date2days = parseInt(date2 / (1000 * 60 * 60 * 24));
var diffDays = date2days - date1days;
alert(diffDays);
【讨论】:
以上是关于Javascript和datediff mysql中日期之间的日期差异不相等的主要内容,如果未能解决你的问题,请参考以下文章