在JavaScript中增加date

我需要在JavaScript中将date值增加一天。

例如,我有一个date值2010-09-11,我需要将第二天的date存储在JavaScriptvariables中。

我怎样才能增加一天的date?

三种select:

1.只使用JavaScript的Date对象(没有库):

我以前对#1的回答是错误的(它增加了24小时,没有考虑到夏令时的转换; 聪明的人指出,它将在2010年11月7日在东部时区失败)。 相反, Jigar的答案是没有图书馆的正确方法:

 var tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); 

即使在一个月(或一年)的最后一天,这也是有效的,因为JavaScriptdate对象对于滚动是很明智的:

 var lastDayOf2015 = new Date(2015, 11, 31); snippet.log("Last day of 2015: " + lastDayOf2015.toISOString()); var nextDay = new Date(lastDayOf2015); var dateValue = nextDay.getDate() + 1; snippet.log("Setting the 'date' part to " + dateValue); nextDay.setDate(dateValue); snippet.log("Resulting date: " + nextDay.toISOString()); 
 <!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script> 
 var myDate = new Date(); //add a day to the date myDate.setDate(myDate.getDate() + 1); 

这个答案中的例子似乎都不适用于夏令时调整日。 在那些日子里,一天中的小时数不是24(23或25,这取决于你是“前进”还是“后退”)。

下面的AddDays javascript函数考虑夏令时:

 function addDays(date, amount) { var tzOff = date.getTimezoneOffset() * 60 * 1000, t = date.getTime(), d = new Date(), tzOff2; t += (1000 * 60 * 60 * 24) * amount; d.setTime(t); tzOff2 = d.getTimezoneOffset() * 60 * 1000; if (tzOff != tzOff2) { var diff = tzOff2 - tzOff; t += diff; d.setTime(t); } return d; } 

以下是我用来testing函数的testing:

  var d = new Date(2010,10,7); var d2 = AddDays(d, 1); document.write(d.toString() + "<br />" + d2.toString()); d = new Date(2010,10,8); d2 = AddDays(d, -1) document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString()); d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)'); d2 = AddDays(d, 1) document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString()); d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)'); d2 = AddDays(d, -1) document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString()); 

在遵循其他人的build议之前,您首先需要parsing您的string:

 var dateString = "2010-09-11"; var myDate = new Date(dateString); //add a day to the date myDate.setDate(myDate.getDate() + 1); 

如果你想再次使用相同的格式,你将不得不这样做“手动”:

 var y = myDate.getFullYear(), m = myDate.getMonth() + 1, // january is month 0 in javascript d = myDate.getDate(); var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str}; dateString = [y, pad(m), pad(d)].join("-"); 

但我build议获得Date.js在其他答复中提到,这将帮助你很多 。

最简单的方法是转换为毫秒,并添加1000 * 60 * 60 * 24毫秒,例如:

 var tomorrow = new Date(today.getTime()+1000*60*60*24); 

使用dateObj.toJSON()方法获取date的string值参考: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON从返回的date值,然后按所需天数递增。

 var currentdate = new Date(); currentdate.setDate(currentdate.getDate() + 1); var tomorrow = currentdate.toJSON().slice(0,10); 

两种方法:

1:

 var a = new Date() // no_of_days is an integer value var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000) 

2:类似于以前的方法

 var a = new Date() // no_of_days is an integer value var b = new Date(a.setDate(a.getDate() + no_of_days) 

明天在纯JS的一行,但它是丑陋的

 new Date(new Date().setDate(new Date().getDate() + 1)) 

结果如下:

 Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time) 

不完全确定它是否是一个BUG(经testing的Firefox 32.0.3和Chrome 38.0.2125.101),但以下代码在巴西(-3 GMT)将失败:

 Date.prototype.shiftDays = function(days){ days = parseInt(days, 10); this.setDate(this.getDate() + days); return this; } $date = new Date(2014, 9, 16,0,1,1); $date.shiftDays(1); console.log($date+""); $date.shiftDays(1); console.log($date+""); $date.shiftDays(1); console.log($date+""); $date.shiftDays(1); console.log($date+""); 

结果:

 Fri Oct 17 2014 00:01:01 GMT-0300 Sat Oct 18 2014 00:01:01 GMT-0300 Sat Oct 18 2014 23:01:01 GMT-0300 Sun Oct 19 2014 23:01:01 GMT-0200 

添加一个小时到date,将使它完美的工作(但不解决问题)。

 $date = new Date(2014, 9, 16,0,1,1); 

结果:

 Fri Oct 17 2014 01:01:01 GMT-0300 Sat Oct 18 2014 01:01:01 GMT-0300 Sun Oct 19 2014 01:01:01 GMT-0200 Mon Oct 20 2014 01:01:01 GMT-0200 

获取未来5天:

 var date = new Date(), d = date.getDate(), m = date.getMonth(), y = date.getFullYear(); for(i=0; i < 5; i++){ var curdate = new Date(y, m, d+i) console.log(curdate) } 

你可以使用我写的这个开源的组件 。 它也可以与其他时间间隔(小时,分钟,星期,月等)一起工作,并将夏令时考虑在内。 您可以使用dateAdd()方法在单个调用中添加date。

使用你的date的例子:

 var oldDate = new Date('September 11, 2010 00:00:00'); var newDate = dateAdd(oldDate, 5, 'days'); // => September 16, 2010 00:00:00 

我更喜欢这个,因为它是香草的JavaScript,并不需要一个完整的库。

  Date.prototype.AddDays = function (days) { days = parseInt(days, 10); return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days); } 

 var dt = new Date(); console.log(dt.AddDays(-30)); console.log(dt.AddDays(-10)); console.log(dt.AddDays(-1)); console.log(dt.AddDays(0)); console.log(dt.AddDays(1)); console.log(dt.AddDays(10)); console.log(dt.AddDays(30)); 

结果

 2017-09-03T15:01:37.213Z 2017-09-23T15:01:37.213Z 2017-10-02T15:01:37.213Z 2017-10-03T15:01:37.213Z 2017-10-04T15:01:37.213Z 2017-10-13T15:01:37.213Z 2017-11-02T15:01:37.213Z