javascript new日期与字符串param有错误的日期

Pet*_*ran 1 javascript date

我正在从字符串创建一个新日期

var s = "2017-12-06"
var dt = new Date(s)
console.log(dt) // outputs Tue Dec 05 2017 19:00:00 GMT-0500 (EST)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Jon*_*eet 8

Date.toString()在您的本地时区格式化,但由于您传入了ISO-8601字符串,因此该值将被解析为它的UTC.

Date.parse()文档中(因为Date(String)构造函数被记录为行为Date.parse):

日期时间字符串可以是简化的ISO 8601格式.例如,可以传递和解析"2011-10-10"(仅限日期)或"2011-10-10T14:48:00"(日期和时间).如果字符串仅为ISO 8601日期,则UTC时区用于解释参数.如果字符串是ISO 8601格式的日期和时间,则将其视为本地.

所以你最终Date得到的相当于2017-12-06T00:00:00Z.但是Date.toString()在你当前的时区即时显示 - 如果你在美国/纽约或类似的时区,那个时刻落后于UTC 5小时,这意味着它将在12月5日晚7点打印.