Javascript 查找两个日期之间的天数差异时出现问题

Javascript 查找两个日期之间的天数差异时出现问题,javascript,actionscript-3,Javascript,Actionscript 3,我一直在使用一个整洁的小程序来计算AS3中两个日期之间的天数差。我得到了一些奇怪的结果,我想知道你们中的任何一位国米科达尔超级领主是否能提供一些线索 为什么2010年第一季度的时间短了一天,而在所有其他情况下,常规表现都很好 非常感谢任何能帮助你的人 function countDays( startDate:Date, endDate:Date ):int { var oneDay:int = 24*60*60*1000; // hour

我一直在使用一个整洁的小程序来计算AS3中两个日期之间的天数差。我得到了一些奇怪的结果,我想知道你们中的任何一位国米科达尔超级领主是否能提供一些线索

为什么2010年第一季度的时间短了一天,而在所有其他情况下,常规表现都很好

非常感谢任何能帮助你的人

        function countDays( startDate:Date, endDate:Date ):int
        {
            var oneDay:int = 24*60*60*1000; // hours*minutes*seconds*milliseconds
            var diffDays:int = Math.abs((startDate.getTime() - endDate.getTime())/(oneDay));
            return diffDays;
        }

        countDays( new Date( 2010, 00, 01 ), new Date( 2011, 00, 01 ) );
        // returns 365, which is correct

        countDays( new Date( 2010, 00, 01 ), new Date( 2010, 03, 01 ) );
        // returns 89, which is 1 day short

        countDays( new Date( 2010, 03, 01 ), new Date( 2010, 06, 01 ) );
        // returns 91, which is correct

        countDays( new Date( 2010, 06, 01 ), new Date( 2010, 09, 01 ) );
        // returns 92, which is correct

        countDays( new Date( 2010, 09, 01 ), new Date( 2011, 00, 01 ) );
        // returns 92, which is correct

也许是夏令时?您在第一季度损失了一个小时,因此您的函数必须截断整数而不是四舍五入。

不能确定。我猜是舍入/截断错误。

下面应该可以:

    function countDays( startDate:Date, endDate:Date ):int 
    { 
        var oneDay:int = 24*60*60*1000; // hours*minutes*seconds*milliseconds 
        var diffDays:int = Math.round(Math.abs((startDate.getTime() - endDate.getTime())/(oneDay))); 
        return diffDays; 
    } 

再加上uhleeka的答案(夏令时)就是问题所在。第一季度有90天,但2010年3月14日只有23个小时,所以除以你的一天将是89.96天。Math.floor将您的工作时间降至89天。Math.ceil在第四季度将不起作用。由于DST,第四季度应该有92.04天,使用Math.ceil会给你93天。Uhleeka你是对的。这一个适用于所有情况:Math.round(Math.abs(myExpression);John我想给你一个复选标记b/c你成功了,并得出了有效的答案。你能编辑你的答案来使用Math.round吗(Math.abs,我会检查它是否被接受?@James:没有自我推销的意图……约翰的答案显然是错的。滚球?是的。但让他将答案从错误调整为正确似乎违背了stackoverflow的目的及其奖励系统。我在将日期从Different转换回date时也遇到了DST问题日期的ce-由于时区偏移量不同,我的结果是前一天的日期在晚上11点,或者是正确的一天,但在凌晨1点,这取决于它穿过DST的方向。有一些代码可以帮助:
if(relativeDate.timezoneOffset!=today.timezoneOffset){relativeDate=新日期(relativeDate.getTime()+(relativeDate.timezoneOffset-today.timezoneOffset)*60000);}