如何以 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 标准化。
看似简单的问题,但 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 thedate
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 标准化。