如何以 YYYY-MM-DD 格式在 JS 中获取第二天的日期?

How do I get the next day's date in JS in YYYY-MM-DD format?

看似简单的问题,但 JS 中所有时区的来龙去脉让我头疼不已。

基本上,如果我有如下日期:

2018-04-06

我希望能够得到第二天的日期:

2018-04-07

我在 SO 上找到了以下代码片段(有点):

var date = new Date('2018-04-06');
date.setDate(date + 1);

问题是我正在使用调整后的时区返回日期,因为我在美国东部时区,所以它给我的日期减去五个小时,这实际上是我所在的同一天开始了。

我浏览了无数 SO 帖子试图找到这个看似简单问题的答案,但是对于任何给定日期,无论用户所在的时区如何,我如何获得 YYYY 中的第二天日期- MM-DD格式?谢谢。

您是否尝试使用 UTC 日期?

var date = new Date('2018-04-06');
console.log(date.toUTCString());

date.setDate(date.getDate() + 1);
console.log(date.toUTCString());

逻辑是在当前时间上加上 24 小时(以毫秒为单位)。例如:

var myDate = new Date();
var oneMoreDay = new Date();
oneMoreDay.setTime(myDate.getTime() + 86400000);
console.log(myDate.getDate());
console.log(oneMoreDay.getDate());

oneMoreDay 变量增加了一天。在您的具体示例中,您只想向 ORIGINAL 变量再添加一天,所以我会执行以下操作:

date.setTime(date.getTime() + 86400000);

格式为 YYYY-MM-DD 的字符串被解析为 UTC,因此在这种情况下,所有操作均采用 UTC(参见 Why does Date.parse give incorrect results? and How can I add 1 day to current date?)。

toISOString方法将return所需格式的字符串,只是trim多余的时间部分,例如

let s = '2018-04-06';
let d = new Date(s);
d.setUTCDate(d.getUTCDate() + 1);
console.log(d.toISOString().substr(0,10));

正如@chrisbyte 所建议的,您是否尝试过使用 toUTCString 方法 而不是 toString() 方法的

As a reminder , toString is the default used when you display the date object withim the console for example

我认为您假设的 "problem" 只是对 Date.toString() 方法行为方式的不完整理解:此方法似乎 return 表示 Date 对象的字符串 似乎使用提到的时区 here(在第一个示例的评论中)

这里是我的片段以了解更多信息:

  const originalDate = new Date('2018-04-06');
    // retrieving the original timestamp
    const originalTimestamp = originalDate.valueOf()
    
    // displaying the original date (non UTC / UTC)
    console.log(`original date (timezone dependent): ${originalDate.toString()}`)
        console.log(`original date (timezone independent): ${originalDate.toUTCString()}`)

    // we add one more day
    originalDate.setDate(originalDate.getDate() +1)
    const dayAfterTimestamp = originalDate.valueOf()
    
   // displaying the original date (non UTC / UTC)
    console.log(`updated date (timezone dependent): ${originalDate.toString()}`)
        console.log(`updated date (timezone independent): ${originalDate.toUTCString()}`)

    // check the differences (in milliseconds)
    console.log(`difference: ${(dayAfterTimestamp-originalTimestamp)}`)
    
    
       // displaying the original format (timezone independent)

最后,如果你想 return 日期字符串作为 YYYY-MM-DD 格式,你可能必须自己实现它:-/,或者使用 toLocaleFormat 方法,但它不是' t 标准化。