如何获取JavaScript中两个日期之间的天数?

如何获取JavaScript中两个日期之间的天数?例如,在输入框中指定两个日期:

<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>

<script>
  alert(datediff("day", first, second)); // what goes here?
</script>
Gil伽罗小宇宙2020/04/03 11:25:24

如何使用DatePicker小部件中的formatDate您可以使用它来转换时间戳格式的日期(自1970年1月1日以来的毫秒数),然后进行简单的减法。

猪猪小宇宙2020/04/03 11:25:23

要计算两个给定日期之间的天数,您可以使用以下代码。我在这里使用的日期是2016年1月1日至2016年12月31日

var day_start = new Date("Jan 01 2016");
var day_end = new Date("Dec 31 2016");
var total_days = (day_end - day_start) / (1000 * 60 * 60 * 24);
document.getElementById("demo").innerHTML = Math.round(total_days);
<h3>DAYS BETWEEN GIVEN DATES</h3>
<p id="demo"></p>

老丝阿飞2020/04/03 11:25:23

我认为解决方案并不正确,我会使用ceil而不是floor来解决问题,round可以正常工作,但这不是正确的操作。

function dateDiff(str1, str2){
    var diff = Date.parse(str2) - Date.parse(str1); 
    return isNaN(diff) ? NaN : {
        diff: diff,
        ms: Math.ceil(diff % 1000),
        s: Math.ceil(diff / 1000 % 60),
        m: Math.ceil(diff / 60000 % 60),
        h: Math.ceil(diff / 3600000 % 24),
        d: Math.ceil(diff / 86400000)
    };
}
斯丁2020/04/03 11:25:23
var start= $("#firstDate").datepicker("getDate");
var end= $("#SecondDate").datepicker("getDate");
var days = (end- start) / (1000 * 60 * 60 * 24);
 alert(Math.round(days));

jsfiddle示例:)

古一2020/04/03 11:25:23

最好通过使用UTC时间来摆脱DST,Math.ceil,Math.floor等:

var firstDate = Date.UTC(2015,01,2);
var secondDate = Date.UTC(2015,04,22);
var diff = Math.abs((firstDate.valueOf() 
    - secondDate.valueOf())/(24*60*60*1000));

本示例给出109天的差异。24*60*60*1000是一天(以毫秒为单位)。

阿飞2020/04/03 11:25:23

我想在两个日期上进行一些计算时发现了这个问题,但该日期具有小时和分钟值,因此我修改了@ michael-liu的答案以满足我的要求,并通过了我的测试。

差异天2012-12-31 23:002013-01-01 01:00应等于1.(2小时)差异天2012-12-31 01:002013-01-01 23:00应等于1.(46小时)

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

var millisecondsPerDay = 24 * 60 * 60 * 1000;
function diffDays(startDate, endDate) {
    return Math.floor(treatAsUTC(endDate) / millisecondsPerDay) - Math.floor(treatAsUTC(startDate) / millisecondsPerDay);
}
斯丁前端2020/04/03 11:25:23

我建议使用moment.js库(http://momentjs.com/docs/#/displaying/difference/)。它可以正确处理夏令时,并且通常很适合使用。

例:

var start = moment("2013-11-03");
var end = moment("2013-11-04");
end.diff(start, "days")
1
小胖2020/04/03 11:25:23

获得两个日期之间差异的最简单方法:

var diff =  Math.floor(( Date.parse(str2) - Date.parse(str1) ) / 86400000); 

您会得到差值天数(如果无法解析一个或两个,则为NaN)。解析日期以毫秒为单位给出结果,要按天获取结果,必须将其除以24 * 60 * 60 * 1000

如果要除以天,小时,分钟,秒和毫秒:

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}

这是我的James版本的重构版本:

function mydiff(date1,date2,interval) {
    var second=1000, minute=second*60, hour=minute*60, day=hour*24, week=day*7;
    date1 = new Date(date1);
    date2 = new Date(date2);
    var timediff = date2 - date1;
    if (isNaN(timediff)) return NaN;
    switch (interval) {
        case "years": return date2.getFullYear() - date1.getFullYear();
        case "months": return (
            ( date2.getFullYear() * 12 + date2.getMonth() )
            -
            ( date1.getFullYear() * 12 + date1.getMonth() )
        );
        case "weeks"  : return Math.floor(timediff / week);
        case "days"   : return Math.floor(timediff / day); 
        case "hours"  : return Math.floor(timediff / hour); 
        case "minutes": return Math.floor(timediff / minute);
        case "seconds": return Math.floor(timediff / second);
        default: return undefined;
    }
}
Mandy村村2020/04/03 11:25:23

我会继续使用这个小工具,在其中您会找到适合您的功能。这是一个简短的示例:

        <script type="text/javascript" src="date.js"></script>
        <script type="text/javascript">
            var minutes = 1000*60;
            var hours = minutes*60;
            var days = hours*24;

            var foo_date1 = getDateFromFormat("02/10/2009", "M/d/y");
            var foo_date2 = getDateFromFormat("02/12/2009", "M/d/y");

            var diff_date = Math.round((foo_date2 - foo_date1)/days);
            alert("Diff date is: " + diff_date );
        </script>