Как проверить значения даты и времени с помощью аббревиатур часовых поясов для определенного формата - PullRequest
1 голос
/ 20 июня 2019

У меня есть приложение Ruby on Rails, в котором есть несколько JQuery DataTable, которые отображают значения даты и времени, которые включают сокращения часового пояса (EST, EDT, PST, PDT и т. Д.). Я хочу, чтобы сортировка таблицы правильно сортировала эти значения даты и времени в правильном порядке. Даже если для всех строк в таблице будет использоваться один и тот же языковой стандарт для объектов даты и времени, фактическое сокращение часового пояса может варьироваться в зависимости от того, действительно ли в это время использовалось летнее время (например, таблица может включать в себя оба значения '03 / 05 / 18 09:32 утра по тихоокеанскому времени и '05/31/17 09:04 утра по тихоокеанскому времени').

Я выполнил шаги, описанные здесь, для добавления форматов моментов для сортировки по дате: https://datatables.net/blog/2014-12-18 Однако токен формата 'z' для часовых поясов устарел с момента с версии 1.6.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 и собирался обновить функцию $ .fn.dataTable.moment () внутри datetime-moment.js, чтобы использовать moment.tz(dateTime, format, useStrict, timezone).isValid()? вместо moment(dateTime, format, locale, useStrict).isValid()?, чтобы я мог передать в формате, содержащем токен 'z', но метод moment.tz (). isValid () ведет себя не так, как я ожидаю.

Когда я пытаюсь проверить значения dateTime с сокращением часового пояса по формату, содержащему токен z, 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()

Я бы предпочел сохранить сокращения часовых поясов в моих значениях даты и времени, так как это более удобно для пользователей, чем смещения по UTC. У кого-нибудь есть идеи относительно того, почему moment.tz (). IsValid () не работает должным образом с сокращением часового пояса? Или какие-либо альтернативные предложения для сортировки таблиц данных jquery, которые содержат значения даты и времени с различными сокращениями часового пояса? Я бы даже подумал о преобразовании всех значений даты и времени в один сокращенный часовой пояс в зависимости от местного часового пояса пользователя, но метод Ruby Time.in_time_zone () не принимает все сокращения часовых поясов (например, передача в 'EST' будет корректной) отображать все значения даты и времени в EST, корректируя все время EDT на один час. Но «PST» здесь не является допустимым значением. Передача в «America / Los_Angeles» приведет к значениям datetime, которые могут заканчиваться PST или PDT, что приводит меня к вопросу их сортировки).

...