3

我需要用 6 位小数计算两个日期之间的天数。我正在使用以下功能

/**
 * Calculates the day difference for two given dates.
 * 
 * @param {Date} from , the start date
 * @param {Date} to , the end date
 * 
 * @return {Number} the day difference
 */
function calculateDayDifference( from, to ) {
    var dayDifference;
    const ONEDAY = 1000 * 60 * 60 * 24;

    if ( from != null && to != null ) {     
        dayDifference = Math.abs( from - to ) / ONEDAY;
    }
    return dayDifference;
}

问题是,以下示例的计算不正确:

  • 23.10.2013 10:0001.11.2013 00:00

它返回8.625,但正确的值是8,583333。这个错误值与正确值相差 1 小时

在以下情况下:

  • 01.11.2013 00:0007.11.2013 10:00

返回值6,416667是正确的。

4

4 回答 4

2

这是由于夏令时。

代码运行良好,8.625 是这两个日期之间的正确时间。如果您不想处理时间更改,请使用 UTC 时间,它没有夏令时,并且(几乎?)所有语言都可用。

于 2013-10-28T09:29:26.357 回答
0

利用.toFixed(6)

function calculateDayDifference( from, to ) {
    var dayDifference;
    const ONEDAY = 1000 * 60 * 60 * 24;

    if ( from != null && to != null ) {     
        dayDifference = (Math.abs( from - to )).toFixed(6); / ONEDAY;
    }
    return dayDifference;
}
于 2013-10-28T09:29:18.137 回答
0

我的解决方法是将以下内容添加到代码中:

if ( from.getTimezoneOffset( ) !== to.getTimezoneOffset( ) ) {
    if ( from.getTimezoneOffset( ) < to.getTimezoneOffset( ) ) {
        to.setHours( to.getHours( ) - 1 );
    } else if ( from.getTimezoneOffset( ) > to.getTimezoneOffset( ) ) {
        to.setHours( to.getHours( ) + 1 );
    }
}
于 2013-10-28T10:38:57.183 回答
0

在 javascript Math.abs 函数中,可能会在浮点值之后给出舍入精度点。

我已经测试了一个例子,你可以用这个来看看.toFixed(6),你可能会得到解决方案。

today=new Date()
var christmas=new Date(today.getFullYear(), 11, 25) 
if (today.getMonth()==11 && today.getDate()>25) 
christmas.setFullYear(christmas.getFullYear()+1) 
var one_day=1000*60*60*24

document.write(((christmas.getTime()-today.getTime())/(one_day)).toFixed(6)+"
days left until Christmas!")

欢迎提问,谢谢

于 2013-10-28T09:49:15.677 回答