计算带小数的日期之间的天数

时间:2013-10-28 09:22:41

标签: javascript date datetime time

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

/**
 * 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:00 01.11.2013 00:00

返回 8.625 ,但正确的值为 8,583333 。这个错误的值differs 1 hour from the correct value

在以下情况中:

  • 01.11.2013 00:00 07.11.2013 10:00

返回值 6,416667 是正确的。

4 个答案:

答案 0 :(得分:2)

这是由于夏令时。

代码工作正常,8.625是这两个日期之间的适当时间。如果你不想处理时间变化,使用UTC时间,它没有夏令时,并且(几乎?)所有语言都可用。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

在javascript中,Math.abs函数可以在浮点值后给出Rounded精度点。

我已经测试了一个您可以使用此.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!")

随意问,    谢谢,

答案 3 :(得分: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 );
    }
}