获取JavaScript中的两个date之间的差异?

我如何得到完整date的两个date之间的差异(我不希望有一天的任何分数)

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

我试过以上,但这没有奏效。

这是一个方法 :

 var date1 = new Date("7/13/2010"); var date2 = new Date("12/15/2010"); var timeDiff = Math.abs(date2.getTime() - date1.getTime()); var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); alert(diffDays); 

注意我们需要用date引号括起来。 其余的代码以毫秒为单位获得时间差,然后除以得到天数。 date需要mm / dd / yyyy格式。

更正确的解决scheme

因为date自然有时区信息,可以跨越不同的节日调整的地区

此问题的以前的答案不考虑两个date跨夏时制(DST)更改的情况下。 发生DST变化的date将以毫秒为单位,即!= 1000*60*60*24 ,因此典型计算将失败。

您可以通过首先将两个date标准化为UTC,然后计算这两个UTCdate之间的差异来解决此问题。

现在,解决scheme可以写成,

 var _MS_PER_DAY = 1000 * 60 * 60 * 24; var a = new Date(); var b = new Date("2017-07-25"); // Or any other JS date var remainingDays = dateDiffInDays(a, b); if (remainingDays > 0 ) { // Apply you login on remaining days } // a and b are javascript Date objects function dateDiffInDays(a, b) { // Discard the time and time-zone information. var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); return Math.floor((utc2 - utc1) / _MS_PER_DAY); } 

这工作,因为UTC时间从来没有观察到DST。 请参阅UTC是否遵守夏令时?

ps在讨论了这个答案的一些评论之后,一旦你已经理解了跨越DST边界的JavaScriptdate的问题,可能不仅仅有一种解决方法。 我上面提供的是一个简单(经过testing)的解决scheme。 我有兴趣知道是否有一个简单的基于算术/math的解决scheme,而不必实例化两个新的Date对象。 这可能会更快。

这是一个使用moment.js的解决scheme:

 var a = moment('7/11/2010','M/D/YYYY'); var b = moment('12/12/2010','M/D/YYYY'); var diffDays = b.diff(a, 'days'); alert(diffDays); 

我用你的原始input值,但你没有指定格式,所以我假设第一个值是7月11日。 如果打算在11月7日,则将格式调整为D/M/YYYY

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

我尝试了很多方法,发现使用datepicker是最好的,但date格式导致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

这是从另一个date减去一个date的代码。 此示例将date转换为对象,因为getTime()函数将不起作用,除非它是Date对象。

  var dat1 = document.getElementById('inputDate').value; var date1 = new Date(dat1)//converts string to date object alert(date1); var dat2 = document.getElementById('inputFinishDate').value; var date2 = new Date(dat2) alert(date2); var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds var diffDays = Math.abs((date1.getTime() - date2.getTime()) / (oneDay)); alert(diffDays); 
 var date1 = new Date(2014,1,15); var date2 = new Date(2015,1,15); var timeDiff = Math.abs(date2.getTime() - date1.getTime()); var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); alert(diffDays); 

演示: http : //jsfiddle.net/PUSQU/23/

1000000%肯定……………

  <script> function myFunction() { var date1=new Date();// for current date var date2 =new Date("Sep, 30, 2015"); // for other date you can get the another date from a textbox by // var Newdate=document.getElementById('<%=textBox1.ClientID%>').value; // convert Newdate to dateTime by...... var date2=New Date(Newdate); var yearDiff=date1.getFullYear()-date2.getFullYear();// for year difference var y1=date1.getFullYear(); var y2=date2.getFullYear(); var monthDiff=(date1.getMonth() + y1*12)-(date2.getMonth() +y2*12); var day1=parseInt(date1.getDate()); var day2=parseInt(date2.getDate()); var dayDiff= (day1-day2)+ (monthDiff * 30); document.write("Number of day difference : "+dayDiff); } </script>