在JavaScript中增加日期

San*_*anu 391 javascript datetime date

我需要在JavaScript中将日期值增加一天.

例如,我有一个日期值2010-09-11,我需要将第二天的日期存储在JavaScript变量中.

如何将日期增加一天?

T.J*_*der 723

三种选择:

1.仅使用JavaScript的Date对象(无库):

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

var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
Run Code Online (Sandbox Code Playgroud)

这甚至适用于一个月(或一年)的最后一天,因为JavaScript日期对象对翻转很聪明:

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());
Run Code Online (Sandbox Code Playgroud)
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
Run Code Online (Sandbox Code Playgroud)

(这个答案目前已被接受,所以我不能删除它.在它被接受之前我向OP建议他们接受Jigar的,但也许他们接受了这个用于列表上的第2项或第3项.)

2.使用MomentJS:

var today = moment();
var tomorrow = moment(today).add(1, 'days');
Run Code Online (Sandbox Code Playgroud)

(请注意,add修改您调用它的实例,而不是返回一个新实例,因此today.add(1, 'days')会修改today.这就是我们开始克隆操作的原因var tomorrow = ....)

3.使用DateJS,但很长时间没有更新:

var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
Run Code Online (Sandbox Code Playgroud)


Jig*_*shi 166

var myDate = new Date();

//add a day to the date
myDate.setDate(myDate.getDate() + 1);
Run Code Online (Sandbox Code Playgroud)

  • 比用`/`替换`-`并希望浏览器接受它的更简单的方法是将字符串分成几部分:`var dateParts = arrivalDate.split(' - '); var y = parseInt(dateParts [0],10); var m = parseInt(dateParts [1],10); var d = parseInt(dateParts [2],10); var dayAfter = new Date(y,m-1,d + 1);`注意我们在这里使用`m-1`,因为javascript月是枚举值(1月为0,而不是1),和`d + 1`因为我们在初始分配中已经进行了增量(它将在2月29日自动纠正,等等) (5认同)

Cle*_*man 33

此答案中的所有示例似乎都不适用于夏令时调整日.在那些日子里,一天中的小时数不是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;
}
Run Code Online (Sandbox Code Playgroud)

以下是我用来测试函数的测试:

    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());
Run Code Online (Sandbox Code Playgroud)


小智 26

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

var tomorrow = new Date(today.getTime()+1000*60*60*24);
Run Code Online (Sandbox Code Playgroud)

  • 除非您的日期采用 UTC 或其他没有夏令时的时区,否则请勿执行此操作。否则,每年2天,就会有意想不到的结果。 (6认同)
  • 一行:`new Date(Date.now()+1000*60*60*24);` (2认同)

jpm*_*tin 20

明天在纯JS的一行,但它很丑!

new Date(new Date().setDate(new Date().getDate() + 1))
Run Code Online (Sandbox Code Playgroud)

结果如下:

Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)
Run Code Online (Sandbox Code Playgroud)


ein*_*nus 12

您首先需要在遵循其他人的建议之前解析您的字符串:

var dateString = "2010-09-11";
var myDate = new Date(dateString);

//add a day to the date
myDate.setDate(myDate.getDate() + 1);
Run Code Online (Sandbox Code Playgroud)

如果您希望它再次以相同的格式返回,则必须"手动"执行此操作:

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("-");
Run Code Online (Sandbox Code Playgroud)

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


Pol*_*olv 11

我觉得没有什么比.getTime()and更安全的了.setTime(),所以这应该是最好的,也是性能最好的。

const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
Run Code Online (Sandbox Code Playgroud)

.setDate() 对于无效日期(如 31 + 1)太危险了,这取决于浏览器的实现。


小智 6

获得接下来的 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)
}
Run Code Online (Sandbox Code Playgroud)