【问题标题】:HTML5 datetime-local (Chrome): How to input datetime in current time zoneHTML5 datetime-local (Chrome):如何在当前时区输入日期时间
【发布时间】:2023-04-09 09:43:01
【问题描述】:

我住在 GMT+9,我想输入当前时区中指定的日期和时间。 Chrome 版本 40.0.2214.93(64 位)

<input type="datetime-local" required>

但是,如果我在日期时间选择器中输入 12:00AM,

该元素返回的实际值是2015-01-30T00:00(通过在 Chrome 控制台中打印出来),它等于我所在时区的上午 9:00。我是否必须手动将 9 小时添加到结果中?由于 Chrome 不支持 datetime 作为输入类型,我不能使用 datetime 作为替代。

【问题讨论】:

  • “既然 Chrome 不支持日期时间”?什么?
  • 请显示您的 HTML 以明确您在说什么元素,并说明您是如何输入 12:00AM 的。在我的 Chrome 中,无法输入 AM 与 PM。这可能取决于浏览器区域设置,因此请指定区域设置(以及 Chrome 版本和平台);这听起来像一个浏览器错误。另请注意,datetime-localdatetime 在 HTML5 中均无效,并且仅受某些浏览器支持;更可靠的方法是用一个字段表示日期,另一个字段表示时间。

标签: html timezone


【解决方案1】:

“2015-01-30T00:00”正是你输入的,所以这就是返回的结果。

您说“...在我的时区等于上午 9:00”。仅当结果为 UTC 时才是正确的——事实并非如此。根据ISO8601 标准,如果值以结尾Z 结尾,例如“2015-01-30T00:00Z”,则仅假定其为UTC。

也许您正在将值输入Date 构造函数?

new Date("2015-01-30T00:00")

在这种情况下,值 被解释为 UTC - 但这是由于 Date 对象的一个​​怪癖。您可以通过一些替换来解决此问题:

new Date("2015-01-30T00:00".replace('T',' ').replace('-','/'))

或者,如果您更喜欢更简洁的代码,请考虑使用moment.js,它没有那种怪癖:

moment("2015-01-30T00:00").toDate();  // or .format(), or other functions...

【讨论】:

  • 谢谢,我现在正在使用 moment.js。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
相关资源
最近更新 更多