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... 哦,你应该明确地在你的date2date1上使用.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.625parseInt 点后的部分被删除(无舍入),所以你有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中日期之间的日期差异不相等的主要内容,如果未能解决你的问题,请参考以下文章

求高人介绍MySQL的datediff函数

(MySQL) 使用 DATEDIFF 函数时遇到问题

MySQL DATEDIFF 函数 VS 比较 INTERVAL DAY

一个特定日期和一列之间的 datediff MySQL

Mysql 常用函数(28)- datediff 函数

Mysql 常用函数(28)- datediff 函数