我有一个Ruby on Rails应用程序,该应用程序具有几个JQuery DataTables,这些表显示日期时间值,其中包括时区缩写(EST,EDT,PST,PDT等)。我希望表排序以正确的顺序正确排列这些日期时间值。即使表中的所有行将为日期时间对象使用相同的语言环境,实际的时区缩写也可以根据当时的夏令时是否有效而有所不同(例如,表可能同时包含'03 / 05 /太平洋夏令时间18 09:32”和“太平洋夏令时间05/31/17 09:04”)。
我已按照此处概述的步骤添加了用于日期排序的momentjs格式:https://datatables.net/blog/2014-12-18
但是,自1.6.0版以来,momentjs已弃用时区的“ z”格式令牌: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()
这是我刚好使用该格式返回时返回给我的确切的dateTime字符串。例:
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()
我希望将时区缩写保留在我的datetime值中,因为它比UTC偏移量更方便用户使用。有谁知道为什么moment.tz()。isValid()不能像时区缩写那样按预期工作?还是对包含日期时间值和不同时区缩写的jquery数据表进行排序的其他建议? 我什至考虑根据用户的本地时区将所有datetime值转换为一个缩写时区,但是Ruby Time.in_time_zone()方法并不能采用所有时区缩写(例如,正确传递“ EST”在EST中显示所有日期时间值,并将所有EDT时间调整一小时,但此处不接受“ PST”值。传递“ America / Los_Angeles”将导致日期时间值可能以PST或PDT结尾,这给我带来了麻烦回到对它们进行排序的问题。