1

我有一个 Ruby on Rails 应用程序,它有几个显示日期时间值的 JQuery DataTables,其中包括时区缩写(EST、EDT、PST、PDT 等)。我希望表格排序以正确的顺序正确排序这些日期时间值。即使表中的所有行对日期时间对象使用相同的语言环境,实际的时区缩写也会因夏令时当时是否有效而有所不同(例如,表可能同时包含 '03/05/ 18 09:32 AM PST”和“05/31/17 09:04 AM PDT”)。

我已按照此处概述的步骤添加用于日期排序的 momentjs 格式:https ://datatables.net/blog/2014-12-18 但是,自 1.6 版以来,时区的“z”格式标记已被 momentjs 弃用。 0: http: //momentjs.com/docs/#/displaying/ 我不能只硬编码已知时区的格式(例如$.fn.dataTable.moment( 'MM/DD/YY hh:mm A [PST]')$.fn.dataTable.moment( 'MM/DD/YY hh:mm A [PDT]')),因为格式不会匹配我的数据表中列中的所有项目,所以排序仍然不会工作。

我引入了 moment-timezone.js 并打算更新 datetime-moment.js 中的 $.fn.dataTable.moment() 函数来使用moment.tz(dateTime, format, useStrict, timezone).isValid()?,而不是moment(dateTime, format, locale, useStrict).isValid()?这样我就可以传入包含“z”标记的格式,但是 moment.tz().isValid() 方法的行为不像我预期的那样。

当我尝试针对包含 z 令牌的格式使用时区缩写验证 dateTime 值时,isValid() 返回 false。

moment.tz('06/19/19 01:53 PM PDT','MM/DD/YY hh:mm A z',true, 'America/Los_Angeles').isValid()

这是我刚刚使用该格式返回给我的确​​切日期时间字符串。示例: moment().tz('America/Los_Angeles').format('MM/DD/YY hh:mm A z');返回06/19/19 01:53 PM PDT

如果我删除区域缩写, moment.tz().isValid() 函数工作得很好,当我使用偏移量而不是时区缩写时它甚至返回 true: moment.tz('06/19/19 01:53 PM -0700','MM/DD/YY hh:mm A Z',true, 'America/Los_Angeles').isValid()

我更愿意在我的日期时间值中保留时区缩写,因为它比 UTC 偏移量更方便用户。有没有人知道为什么 moment.tz().isValid() 似乎不能像预期的那样使用时区缩写?或者对包含具有不同时区缩写的日期时间值的 jquery 数据表进行排序的任何替代建议?我什至会考虑根据用户的本地时区将所有日期时间值转换为一个缩写的时区,但 Ruby Time.in_time_zone() 方法不会接受所有时区缩写(例如,传入“EST”将正确在 EST 中显示所有日期时间值,将所有 EDT 时间调整一小时。但“PST”在这里不是一个可接受的值。传入“America/Los_Angeles”

4

0 回答 0