没有时区偏移的 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 偏移量