两个日期之间的差异

difference between 2 dates

本文关键字:之间 日期 两个      更新时间:2023-09-26

我必须简单地计算两个日期之间的差异,并将其显示为整数,但如果两个日期间有大量日期(超过26),以及两个日期中有一个月的"31日",则下面的代码会出错。

找不到我的代码有什么问题。。。?

'ires_sakuma_datums''ires_beigu_datums'的值由jquery日历选择器设置,并分别以例如25-08-201217-09-2012的格式显示,结果应显示为id 'dienu_skaits'

示例'ires_sakuma_datums'被设置为28-08-2012并且'ires_beigu_datums'被设置为29-09-2012并且其结果为31.041666666666668,尽管我期望其结果为32

   function getDays()
    {
        var x = document.getElementById('ires_sakuma_datums').value;
        var y = document.getElementById('ires_beigu_datums').value;
        //assuming that the delimiter for dt time picker is a '-'.
        var arr1 = x.split('-');
        var arr2 = y.split('-');
        var dt1 = new Date();
        dt1.setFullYear(arr1[2], arr1[1], arr1[0]);
        var dt2 = new Date();
        dt2.setFullYear(arr2[2], arr2[1], arr2[0]);
        document.getElementById('dienu_skaits').value = (dt2.valueOf() - dt1.valueOf()) / (60 * 60 * 24 * 1000);
document.forms['test'].elements['dienu_skaits'].focus();
    }

问题是要传递给Date的月份是基于0的,因此必须从该月份中减去1。http://jsfiddle.net/qB9V3/5/因此,您对28-08-201229-09-2012的比较实际上是对28-09-201229-10-2012 的困难

所以你的代码需要更改为

    var arr1 = x.split('-');
    var arr2 = y.split('-');
    var dt1 = new Date();
    dt1.setFullYear(arr1[2], parseInt(arr1[1],10) -1, arr1[0]);
    var dt2 = new Date();
    dt2.setFullYear(arr2[2], parseInt(arr2[1],10) - 1, arr2[0]);

注意,如果你的日期跨夏令时发生变化,中间的天数将不相等,因此你需要对结果进行四舍五入

document.getElementById('dienu_skaits').value = Math.round( 
    (dt2 - dt1) / (60 * 60 * 24 * 1000) 
);