我有一个日期字符串" 2017-12-31"
当我在new Date("2017-12-31")
中传递它时,它会给出输出
Sat Dec 30 2017 12:00:00 GMT-1200 (Local Standard Time)
当我像new Date('"2017-12-31"')
或new Date("'2017-12-31'")
那样给出时,它会给出输出
Sun Dec 31 2017 00:00:00 GMT-1200 (Local Standard Time)
我无法理解为什么会这样。任何人都可以解释一下。
答案 0 :(得分:3)
在第一种情况下,您在the only format the Date
object is required to support中传递了有效的日期时间字符串。当您这样做时,规范要求将您传递给它的日期字符串视为UTC,因为它没有时间部分(如果字符串中有时间,则需要将其视为本地时间)。 (可悲的是,在最近的几个规范版本中,这种情况有所不同。现在它已经稳定了。)
在第二种情况下,你传递它是无意义的("
和'
都不应该在日期/时间字符串中),这意味着实现可以回退到任何实现定义的机制解析它想要的字符串,它可以选择将其解释为 local 时间。显然,你的实现正在这样做(而不是更合理的方法 - 恕我直言 - 创建一个无效的日期)。由于您的时区是GMT-1200,结果是两次相隔12小时。
故事的道德:只传递所需格式的字符串,或自己解析。