Как я могу разобрать эти строки в даты 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)
Используйте строчные буквы h
на час, чтобы получить 1-12. Прописные буквы H
дает 0-23. Из ваших примеров я бы использовал формат
MM-dd-yyyy hh:mm tt
Вы должны обрабатывать "Сегодня @ " отдельно. Когда вы найдете эту строку, ожидайте, что следующий токен будет временем в форме hh:mm tt
, Разобрать вторую часть как время и объединить ее с сегодняшней (локальной) датой. Это нетрудно сделать программно с помощью функций Date.js, но вы не найдете ни одной строки формата, которая захватывает часть "Today @ " (как вы знаете).