Как я могу разобрать эти строки в даты UTC? - PullRequest
3 голосов
/ 22 ноября 2011

Я очищаю сайт, и даты бывают в двух формах:

11-22-2011 07:41 AM
Today @ 07:41 AM

Оба из них GMT-8.Я хотел бы получить из них временную метку Unix, чтобы я мог создать значимый объект даты

Есть идеи, какой это может быть часовой пояс?Примерно месяц назад сайт показывал GMT-9 раз.Может ли javascript автоматически обрабатывать переход на летнее время?

У меня возникли проблемы с их анализом.Частично проблема заключается в часовом поясе.

В настоящее время я использую Date.js 'parseExact:

date = Date.parseExact(date + ' PDT', 'MM-dd-yyyy H:mm tt zzz');

Hovever, это похоже на анализ 12:00 как1014 *, а не 0:00.Кроме того, я в полной растерянности относительно того, как обращаться с теми, которые начинаются с today @.

Ответы [ 4 ]

1 голос
/ 22 ноября 2011

Вы можете написать собственную логику анализа дат с учетом часового пояса, которая учитывает часовой пояс удаленного сервера.

псевдо-код:

if date starts with "Today @"
  replace "Today @" with currentDateInRemoteTimezone in date
endif

parse_timezone-aware(date)
1 голос
/ 22 ноября 2011

Когда я пробую оба ваших примера с использованием интерактивного парсера на http://www.datejs.com/, я получаю ожидаемые результаты.

Часовой пояс, скорее всего, "Западное побережье США", он же "Тихоокеанское время".

К сожалению, это означает, что разные вещи в разное время года. Весной и летом этот часовой пояс называется «PDT» (GMT-0700), а в остальное время он называется «PST» (GMT-0800).

Чтобы еще больше усложнить ситуацию, даты, в которые эти изменения не совпадают с датами, когда изменяются другие зоны (например, в Европе).

Я не думаю, что есть способ указать значение часового пояса для Date.js, который может учитывать это автоматически.

0 голосов
/ 22 ноября 2011

Используйте строчные буквы h для часа, чтобы получить 1-12.Верхний регистр H дает 0-23.Из ваших примеров я бы использовал формат

MM-dd-yyyy hh:mm tt

Документация

Вы должны обрабатывать «Сегодня @» отдельно.Когда вы найдете эту строку, ожидайте, что следующий токен будет временем в форме hh:mm tt.Разобрать вторую часть как время и объединить ее с сегодняшней (локальной) датой.Это нетрудно сделать программно с помощью функций Date.js, но вы не найдете ни одной строки формата, которая захватывает часть «Today @» (как вы знаете).

0 голосов
/ 22 ноября 2011

Почему бы просто не добавить HHHH:mm zzz, чтобы получить 12:00?

...