【发布时间】:2016-05-28 15:55:57
【问题描述】:
我正在尝试将两个日期字符串都传递给new Date(t)。
我希望两个字符串代表相同的时间,毕竟如果我省略时间,那不应该是当天的午夜吗?
不过,
new Date("2016-02-16 00:00")
按预期返回当地时间 2016 年 2 月 16 日午夜,
new Date("2016-02-16")
返回 2016 年 2 月 16 日午夜 UTC,这是错误的,或者至少不是我所期望的,因为其他字符串解析为。
如果他们都具有相同的行为,我会理解它,无论是将时间返回为当地时间,还是作为 UTC,但为什么他们返回这样不同的东西似乎非常不一致。
作为一种解决方法,每当我遇到没有相应时间戳的日期时,我都可以附加“00:00”以获得一致的行为,但这似乎相当脆弱。
我从一个“datetime-local”类型的 INPUT 元素中获取此值,因此我必须解决页面元素返回的值似乎特别不一致。
我做错了什么,还是应该做些不同的事情?
【问题讨论】:
-
2016-02-16 00:00-- 这看起来根本不像是有效时间。 ecma-international.org/ecma-262/6.0/…,但即使你把T放在那里,它的行为确实不同 -
您目前是如何根据输入元素的值从输入元素中获取 Date 对象的?
-
按照标准-“如果 HH、mm 或 ss 字段不存在,则使用“00”作为值,并且不存在的 sss 字段的值为“000”。如果时区偏移量不存在,日期时间被解释为本地时间。” --- 它的行为应该相同。
-
@BoltClock 嗯,看起来它正在获取元素的 value 字段,并且(正如 zerkms 注意到的那样)出于某种原因删除了 T (我认为是因为该值在以下上下文中显示给用户“T”会令人困惑)
-
@Michael:太棒了。像这样的浏览器怪癖是我最喜欢的。 (或者它可能是一个 DOM 规范怪癖?不知道,我还没有真正看过。)
标签: javascript date datetime