【发布时间】:2020-04-13 23:47:12
【问题描述】:
用户输入2019-12-22 的日期输入会给出以下值:
-
input.value:"2019-12-22" -
input.valueAsNumber:1576972800000 -
input.valueAsDate:"Sat Dec 21 2019 16:00:00 GMT-0800 (Pacific Standard Time)"- 这个结果日期对象似乎是错误的
- 当浏览器返回一个值时,它会将用户输入视为世界时
- 所以日期对象的 utc 表示与输入显示给用户的相同
-
input.valueAsDate.getUTCDate()返回22,这是用户输入的内容 -
input.valueAsDate.getDate()返回21,而不是用户输入的内容 - 因此我们得出结论,日期输入显示并接受 utc 时间,而不是当地时间
我们希望生成的 date.toString() 显示与日期输入中原始用户输入相同的结果
我们如何让用户与当地时间进行交互,然后在我们的脚本中获取正确的日期对象?
【问题讨论】:
-
我认为您混淆了内部日期状态及其
toString()方法返回的表示。只需使用input.valueAsDate.toLocaleDateString(),它应该与用户输入的内容匹配。 -
嘿,感谢您的光临!不幸的是:不,否定:这不是真的。刚刚在实验中验证,当用户输入
2019-12-22时,您对input.valueAsDate.toLocaleDateString()的建议实际上返回"21/12/2019"-- 这与用户输入的内容不匹配 -- 假设日期输入接受本地时间然后返回一个日期本地输出匹配的对象是错误的——我知道,这很令人困惑,解决它的唯一方法是手动补偿时间偏移???????? -
奇怪的是,这在 Firefox 中可以正常工作,但在 Chrome 中却不行(我假设您正在使用它)。
-
@str -- 没有人,我刚刚在 Firefox 中复制了这个:
input.valueAsDate.toLocaleDateString()返回"12/21/2019"-- 我们之间会不会有一些浏览器配置不同?肯定是我们之间的时区不同,你的时区是多少?也许您的时区偏移量不足以显示当天的差异 - 因此,对于我来说,在整个示例中使用时间输入可能会更明智,因为任何人都会重现该问题在格林威治 :) -
我将计算机的时区设置为您的 (PST),以验证 Firefox 和 Chrome 的行为。他们没有为我返回同样的东西。
标签: javascript date time timezone