Как я могу разобрать эти строки в даты UTC?

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

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 утра как 12:00не 0:00, Кроме того, я в полной растерянности относительно того, как обращаться с теми, которые начинаются с today @,

4 ответа

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

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

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

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

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

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

псевдокод:

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

parse_timezone-aware(date)

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

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

MM-dd-yyyy hh:mm tt

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

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

Другие вопросы по тегам