没有时区偏移的 HTML 输入类型日期和时间

Posted

技术标签:

【中文标题】没有时区偏移的 HTML 输入类型日期和时间【英文标题】:HTML input type date and time without timezone offset 【发布时间】:2016-07-28 22:06:45 【问题描述】:

我正在使用 html5 输入日期和输入时间进行离子开发。默认情况下,它绑定为 ISO 日期字符串并更改为 UTC 日期时间。对我来说似乎是错误的,因为当用户选择日期 2016-06-06 时,它可能已变为 2016-06-07 或 2016-06-05,具体取决于时区偏移量。输入类型=时间的类似情况。

我的目的是让 ISO 字符串中的日期保留用户选择的内容,而不是用时区差异来抵消它。

类似于 input datetime-local 但似乎移动设备不支持 datetime-local。

我发现像 input type="date-local" 或 "time-local" 这样的东西。

【问题讨论】:

您可以在消费前自行调整日期的偏移量,以便用户使用 ISO 日期,但假装它们是本地日期。 【参考方案1】:

首先,有趣的是 type="datetime" 一直是 removed from the HTML5 standard 而只有 "datetime-local" 存在,但似乎并非每个移动浏览器都实现了它。对于 type="date",它没有时间分量,所以直接使用 UTC 日期即可。的确,将 UTC 日期 d 转换为本地日期有点荒谬:

新日期(d.toLocaleDateString())

d.setMinutes(d.getMinutes()+d.getTimezoneOffset())

new Date(+d+d.getTimezoneOffset()*60000)

但是你能做什么呢?

【讨论】:

直接使用 UTC 日期可能会导致意外结果,即使使用 type="date" 也是如此。用户可以选择特定日期(UTC 时间),应用程序可能会将其解释为前一天,因为用户可能输入了诸如“Wed Jan 30 2019 00:00:00 GMT-0200”这样的日期。跨度> 【参考方案2】:

javascript 日期始终为 UTC,但您可以获取本地值,如下所示:http://www.w3schools.com/jsref/jsref_obj_date.asp

getUTCHours() 根据通用时间返回小时(从 0 到 23) getHours() 返回小时(0-23)

第一个将始终从输入的内容转换为 UTC。第二个将使用时区偏移量来计算应该返回的内容。

【讨论】:

以上是关于没有时区偏移的 HTML 输入类型日期和时间的主要内容,如果未能解决你的问题,请参考以下文章

使用 Joda-Time 获取给定日期和时区的 UTC 偏移量

从时区偏移本地化日期时间(时区感知)

在雅典娜中将具有时区偏移的字符串转换为日期时间

Python pytz 时区转换返回的值与不同日期的时区偏移量不同

获取带有时区偏移的日期

Javascript 日期对象未正确调整时区偏移