如何使用JavaScript添加/减lessdate?

我想让用户使用JavaScript轻松地添加和减lessdate,以按date浏览他们的条目。

date格式为:“mm / dd / yyyy”。 我希望他们能够点击“下一步”button,如果date是:“2012年6月1日”,然后单击下一步,它应该成为:“2012年6月2日”。 如果他们点击“prev”button,那么它应该变成“05/31/2012”。

它需要跟踪闰年,本月的天数等。

有任何想法吗?

PS使用AJAX从服务器获取date不是一个选项,它有点滞后,而不是客户需要的用户的经验。

码:

 var date = new Date('2011','01','02'); alert('the original date is '+date); var newdate = new Date(date); newdate.setDate(newdate.getDate() - 7); // minus the date var nd = new Date(newdate); alert('the new date is '+nd);​ 

JSFiddle演示

使用Datepicker:

 $("#in").datepicker({ minDate: 0, onSelect: function(dateText, inst) { var actualDate = new Date(dateText); var newDate = new Date(actualDate.getFullYear(), actualDate.getMonth(), actualDate.getDate()+1); $('#out').datepicker('option', 'minDate', newDate ); } }); $("#out").datepicker();​ 

JSFiddle演示

额外的东西可能来得方便:

 getDate() Returns the day of the month (from 1-31) getDay() Returns the day of the week (from 0-6) getFullYear() Returns the year (four digits) getHours() Returns the hour (from 0-23) getMilliseconds() Returns the milliseconds (from 0-999) getMinutes() Returns the minutes (from 0-59) getMonth() Returns the month (from 0-11) getSeconds() Returns the seconds (from 0-59) 

良好的链接: MDNdate

您需要使用getTime()setTime()来添加或减去javascript Date对象中的时间。 使用setDate()getDate()将在达到月份getDate()限制时导致错误。

使用setTime可以让你设置一个以毫秒为单位的偏移量,并让Date对象作为剩下的值:

 var now=new Date(); var yesterdayMs = now.getTime() - 1000*60*60*24*1; // Offset by one day; now.setTime( yesterdayMs ); 
 startdate.setDate(startdate.getDate() - daysToSubtract); startdate.setDate(startdate.getDate() + daysToAdd); 

JavaScript Date对象可以在这里帮助。

第一步是将这些string转换为Date实例。 这很容易完成:

 var str = "06/07/2012"; // Eg, "mm/dd/yyyy"; var dt = new Date(parseInt(str.substring(6), 10), // Year parseInt(str.substring(0, 2), 10) - 1, // Month (0-11) parseInt(str.substring(3, 5), 10)); // Day 

那么你可以做各种有用的计算。 JavaScriptdate了解闰年等。 他们用一个理想化的“日”概念,这个概念正好是 86,400秒。 它们的基础价值是“大纪元”以来的毫秒数(1970年1月1日午夜)。 在“大纪元”之前的date可能是负数。

更多关于Date的MDN页面 。

你也可以考虑使用像MomentJS这样的库,这将有助于parsing,做datemath,格式化…

可能是这可能有所帮助

  <script type="text/javascript" language="javascript"> function AddDays(toAdd) { if (!toAdd || toAdd == '' || isNaN(toAdd)) return; var d = new Date(); d.setDate(d.getDate() + parseInt(toAdd)); document.getElementById("result").innerHTML = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear(); } function SubtractDays(toAdd) { if (!toAdd || toAdd == '' || isNaN(toAdd)) return; var d = new Date(); d.setDate(d.getDate() - parseInt(toAdd)); document.getElementById("result").innerHTML = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear(); } </script> ---------------------- UI --------------- <div id="result"> </div> <input type="text" value="0" onkeyup="AddDays(this.value);" /> <input type="text" value="0" onkeyup="SubtractDays(this.value);" /> 
 //In order to get yesterday's date in mm/dd/yyyy. function gimmeYesterday(toAdd) { if (!toAdd || toAdd == '' || isNaN(toAdd)) return; var d = new Date(); d.setDate(d.getDate() - parseInt(toAdd)); var yesterDAY = (d.getMonth() +1) + "/" + d.getDate() + "/" + d.getFullYear(); $("#endDate").html(yesterDAY); } $(document).ready(function() { gimmeYesterday(1); }); 

你可以试试这里: http : //jsfiddle.net/ZQAHE/

在JavaScript中处理date总是有点麻烦。 我总是最终使用一个图书馆。 Moment.js和XDate都很棒:

http://momentjs.com/

http://arshaw.com/xdate/

小提琴:

http://jsfiddle.net/39fWa/

 var $output = $('#output'), tomorrow = moment().add('days', 1); $('<pre />').appendTo($output).text(tomorrow); tomorrow = new XDate().addDays(-1); $('<pre />').appendTo($output).text(tomorrow); 

我喜欢的方式是,如果你有一个date对象,你可以从中减去另一个date对象来获得差异。 date对象基于某个date的毫秒数。

 var date1 = new Date(2015, 02, 18); // "18/03/2015", month is 0-index var date2 = new Date(2015, 02, 20); // "20/03/2015" var msDiff = date2 - date1; // 172800000, this is time in milliseconds var daysDiff = msDiff / 1000 / 60 / 60 / 24; // 2 days 

所以这就是你如何减去date。 现在,如果你想添加他们? date1 + date2给出一个错误..但是,如果我想获得在毫秒的时间,我可以使用:

 var dateMs = date1 - 0; // say I want to add 5 days I can use var days = 5; var msToAdd = days * 24 * 60 * 60 * 1000; var newDate = new Date(dateMs + msToAdd); 

通过减去0,将date对象转换为毫秒格式。

您可以使用本地javascript Date对象来跟踪date。 它会给你当前的date,让你跟踪日历具体的东西,甚至帮助你pipe理不同的时区。 您可以添加和减less天/小时/秒来更改您正在使用的date或计算新的date。

看看这个对象参考了解更多:

date

希望有所帮助!

所有这些添加date的函数都是错误的。 您将错误的月份传递给date函数。 有关该问题的更多信息: http : //www.domdigger.com/blog/?p=9

我正在使用的东西(jQuery需要),在我的脚本我需要它的当天,但当然你可以编辑它相应的。

HTML:

 <label>Date:</label><input name="date" id="dateChange" type="date"/> <input id="SubtractDay" type="button" value="-" /> <input id="AddDay" type="button" value="+" /> 

JavaScript的:

  var counter = 0; $("#SubtractDay").click(function() { counter--; var today = new Date(); today.setDate(today.getDate() + counter); var formattedDate = new Date(today); var d = ("0" + formattedDate.getDate()).slice(-2); var m = ("0" + (formattedDate.getMonth() + 1)).slice(-2); var y = formattedDate.getFullYear(); $("#dateChange").val(d + "/" + m + "/" + y); }); $("#AddDay").click(function() { counter++; var today = new Date(); today.setDate(today.getDate() + counter); var formattedDate = new Date(today); var d = ("0" + formattedDate.getDate()).slice(-2); var m = ("0" + (formattedDate.getMonth() + 1)).slice(-2); var y = formattedDate.getFullYear(); $("#dateChange").val(d + "/" + m + "/" + y); }); 

的jsfiddle