哪个 JS 日期时间选择器正确处理 DST 转换?

Posted

技术标签:

【中文标题】哪个 JS 日期时间选择器正确处理 DST 转换?【英文标题】:Which JS datetime picker handles DST transitions properly? 【发布时间】:2013-10-23 14:12:52 【问题描述】:

我无法弄清楚如何在我的应用前端处理本地日期时间。

我想找到一个 JS 日期时间选择器,它可以识别时区(使用 moment.js)并正确处理 DST 转换(即:如果 00:00 在所选日期不存在,则不允许您选择允许您在同一天发生的两个 11:00 pms 之间进行选择,方法是显示两个实例,并带有某种视觉提示,表明存在 DST 转换)。

在时间选择器中处理 DST 转换是否有任何建议或最佳实践?我似乎找不到任何东西。

任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

好主意!但是 AFAIK 这并不作为任何类型的预制组件存在。我一直不得不自己编写这个,并且它最终被专门用于每个应用程序。我没有花时间编写可用于任何应用程序的通用版本。

您当然可以将其编写为 moment.js 插件。我们很乐意从 momentjs.com 网站链接它。如果您决定这样做,请告诉我。

就时区感知日期/时间选择器的一般建议而言 - 我认为您已经掌握了大部分内容,但回顾一下:

不允许为目标时区选择无效的日期/时间。

您可能会显示一个弹出窗口或验证错误,或者只是阻止选择以使其无法被选中。或这些方法的组合。

如果为目标时区选择了不明确的日期/时间,请询问用户他们指的是两个实例中的哪一个。

将其存储为完整的 ISO8601 扩展格式,例如 2013-11-03T01:00:00-05:00。 看看您能否以某种方式直观地表示此选择会很有趣。可能有两个选项显示偏移量 (-04:00/-05:00) 和/或缩写 (EDT/EST)。

如果您还需要选择时区,请记住 IANA 时区的完整列表可能会令人生畏,有超过 500 个条目。

您可能希望提供一对 下拉列表,一个用于国家/地区,另一个用于按国家/地区过滤的时区。您可以使用zone.tab 数据按国家代码过滤。 另一种方法是合并基于地图的时区选择器,例如this one。 您可以考虑使用jsTimeZoneDetect 来猜测当地时区。 当然,您可能只想单独提供目标时区,以便实现您的控件的开发人员可以决定如何连接时区选择。

【讨论】:

在视觉上,我会用一条消息显示偏移量“在这一天,时钟将回退 1 小时。这是在过渡之后。”不幸的是,目前我没有是时候实施这个了,但我会很快(几周后)研究一下。通常,我希望将这样的控件传递给它 IANA 时区 ID(将传递给内部 moment.js 实例)。 听起来是个好计划。您可能会考虑它们在timeanddate.com 上的列出方式。此外,您肯定需要moment-timezone 才能完成这项工作。

以上是关于哪个 JS 日期时间选择器正确处理 DST 转换?的主要内容,如果未能解决你的问题,请参考以下文章

用 momentJS 正确处理 DST 偏移

日期选择器中带有时刻 js 的无效日期

从一个本地时区到另一个本地时区的 Python 日期时间转换(+ 奖励 DST)

自 DST 日期起获取行的正确方法?

JavaScript:日期选择器组件的使用

JavaScript:日期选择器组件的使用