在JavaScript中获取2个日期之间的差异?

我如何得到2个日期之间的差异在一整天(我不想要任何分数的一天)

var date1 = new Date('7/11/2010');var date2 = new Date('12/12/2010');var diffDays = date2.getDate() - date1.getDate();alert(diffDays)

我尝试了上面的方法,但这不起作用。

1245106 次浏览

这里有个办法

const date1 = new Date('7/13/2010');const date2 = new Date('12/15/2010');const diffTime = Math.abs(date2 - date1);const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));console.log(diffTime + " milliseconds");console.log(diffDays + " days");

观察到我们需要用引号括住日期。其余代码以毫秒为单位获取时间差,然后除以获得天数。日期需要mm/dd/yyyy格式。

var date1 = new Date("7/11/2010");var date2 = new Date("8/11/2010");var diffDays = parseInt((date2 - date1) / (1000 * 60 * 60 * 24), 10);
alert(diffDays )

更正确的解决方案

由于日期自然具有时区信息,可以跨越具有不同日光节约调整的区域

此问题的先前答案未考虑所讨论的两个日期跨越夏令时(DST)更改的情况。DST更改发生的日期将具有以毫秒为单位的持续时间!= 1000*60*60*24,因此典型计算将失败。

您可以通过首先将两个日期归一化为UTC,然后计算这两个UTC日期之间的差异来解决这个问题。

现在,解决方案可以写成,

// a and b are javascript Date objectsfunction dateDiffInDays(a, b) {const _MS_PER_DAY = 1000 * 60 * 60 * 24;// Discard the time and time-zone information.const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
return Math.floor((utc2 - utc1) / _MS_PER_DAY);}
// test itconst a = new Date("2017-01-01"),b = new Date("2017-07-25"),difference = dateDiffInDays(a, b);    
console.log(difference + ' days')

这是有效的,因为UTC时间永远不会观察到DST。见UTC是否遵守夏令时?

附言:在讨论了对这个答案的一些评论之后,一旦你理解了跨越DST边界的javascript日期的问题,解决它的方法可能不止一种。我上面提供的是一个简单的(并经过测试的)解决方案。我想知道是否有一个简单的基于算术/数学的解决方案,而不是实例化两个新的Date对象。那可能会更快。

我尝试了很多方法,发现使用datepicker是最好的,但是日期格式会导致JavaScript出现问题。

这是我的答案,可以从盒子里跑出来。

<input type="text" id="startdate"><input type="text" id="enddate"><input type="text" id="days">
<script src="https://code.jquery.com/jquery-1.8.3.js"></script><script src="https://code.jquery.com/ui/1.10.0/jquery-ui.js"></script><link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/redmond/jquery-ui.css" /><script>$(document).ready(function() {
$( "#startdate,#enddate" ).datepicker({changeMonth: true,changeYear: true,firstDay: 1,dateFormat: 'dd/mm/yy',})
$( "#startdate" ).datepicker({ dateFormat: 'dd-mm-yy' });$( "#enddate" ).datepicker({ dateFormat: 'dd-mm-yy' });
$('#enddate').change(function() {var start = $('#startdate').datepicker('getDate');var end   = $('#enddate').datepicker('getDate');
if (start<end) {var days   = (end - start)/1000/60/60/24;$('#days').val(days);}else {alert ("You cant come back before you have been!");$('#startdate').val("");$('#enddate').val("");$('#days').val("");}}); //end change function}); //end ready</script>

小提琴可以在这里看到DEMO

这是从一个日期减去另一个日期的代码。此示例将日期转换为对象,因为getTime()函数除非是Date对象,否则无法工作。

    var dat1 = document.getElementById('inputDate').value;var date1 = new Date(dat1)//converts string to date objectalert(date1);var dat2 = document.getElementById('inputFinishDate').value;var date2 = new Date(dat2)alert(date2);
var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*millisecondsvar diffDays = Math.abs((date1.getTime() - date2.getTime()) / (oneDay));alert(diffDays);