我正在从字符串
创建一个新日期var s = "2017-12-06"
var dt = new Date(s)
console.log(dt) // outputs Tue Dec 05 2017 19:00:00 GMT-0500 (EST)
我错过了什么?
答案 0 :(得分:8)
Date.toString()
在您的本地时区格式化,但由于您已传入ISO-8601字符串,因此该值已解析,就像它的UTC一样
从Date.parse()
documentation开始(因为记录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()
会在您当前的时区显示您的即时时间 - 如果您在美国/纽约或类似的时区落后于此时刻的5小时,那就意味着&# 39;将于12月5日晚上7点打印。