最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Problem finding the difference in days between two dates - Stack Overflow

programmeradmin2浏览0评论

I have been using a tidy little routine that I found here to calculate the difference in days between two dates in AS3. I am getting some strange results and I am wondering if any of you inter-codal-mega-lords can shed some light?

Why is Q1 of 2010 ing up one day short, when in all other cases the routine is performing fine?

Many thanks in advance to anyone who can help!

        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

I have been using a tidy little routine that I found here to calculate the difference in days between two dates in AS3. I am getting some strange results and I am wondering if any of you inter-codal-mega-lords can shed some light?

Why is Q1 of 2010 ing up one day short, when in all other cases the routine is performing fine?

Many thanks in advance to anyone who can help!

        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
Share Improve this question edited May 23, 2017 at 12:11 CommunityBot 11 silver badge asked Jun 9, 2010 at 21:21 JamesJames 6418 silver badges17 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 4

Below should work:

    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; 
    } 

Daylight Savings, maybe? You lose an hour in the first quarter, so your function must be truncating the int instead of rounding.

Can't be sure. I'd guess at a rounding/truncation error.

发布评论

评论列表(0)

  1. 暂无评论