Цель: найти local time
и UTC time offset
построить URL в следующем формате.
Пример URL: / Actions / Sleep? Duration = 2002-10-10T12: 00: 00−05: 00
Формат основан на рекомендации W3C: http://www.w3.org/TR/xmlschema11-2/#dateTime.
В документации говорится:
Например, 2002-10-10T12: 00: 00−05: 00 (полдень 10 октября 2002 года по центральному летнему времени, а также по восточному поясному времени в США) равно 2002-10-10T17: 00: 00Z, на пять часов позже 2002-10-10T12: 00: 00Z.
Итак, исходя из моего понимания, мне нужно найти мое местное время с помощью new Date (), затем использовать функцию getTimezoneOffset (), чтобы вычислить разницу, а затем прикрепить ее к концу строки.
1. получить местное время с форматом
var local = new Date().format("yyyy-MM-ddThh:mm:ss"); //today (local time)
вывод
2013-07-02T09:00:00
2. получить смещение времени UTC на час
var offset = local.getTimezoneOffset() / 60;
вывод
7
3.Создание URL (только временная часть)
var duration = local + "-" + offset + ":00";
вывод:
2013-07-02T09:00:00-7:00
Приведенный выше результат означает, что мое местное время - 2013/07/02, 9 утра, а разница от UTC составляет 7 часов (UTC на 7 часов опережает местное время)
Пока кажется, что это работает, но что, если getTimezoneOffset () вернет отрицательное значение, например -120?
Мне интересно, как должен выглядеть формат в таком случае, потому что я не могу понять из документа W3C. Заранее спасибо.
getTimezoneOffset()
возвращает обратный знак формата, требуемого спецификацией, на которую вы ссылаетесь.Этот формат также известен как ISO8601 , а точнее RFC3339 .
В этом формате UTC представлено
Z
смещением от UTC. Значение такое же, как в JavaScript, но порядок вычитания инвертирован, поэтому результат имеет противоположный знак.Кроме того, для
Date
вызываемого нативного объекта нет методаformat
, поэтому ваша функция в # 1 завершится ошибкой, если вы не используете библиотеку для этого. Обратитесь к этой документации .Если вы ищете библиотеку, которая может работать с этим форматом напрямую, я рекомендую попробовать moment.js . Фактически, это формат по умолчанию, поэтому вы можете просто сделать это:
Это хорошо протестированное кросс-браузерное решение, обладающее множеством других полезных функций.
источник
Думаю, стоит учесть, что вы можете получить запрошенную информацию с помощью всего одного вызова API к стандартной библиотеке ...
Если вы хотите добавить разделитель «T», удалить «GMT-» или добавить «: 00» в конец, вам придется выполнить замену текста.
Но тогда вы можете легко поиграть с другими вариантами, например, если хотите. используйте время 12 часов или опустите секунды и т. д.
Обратите внимание, что я использую Швецию в качестве локали, потому что это одна из стран, использующих формат ISO 8601. Я думаю, что большинство стран ISO используют этот формат «GMT-4» для смещения часового пояса, за исключением Канады, где используется аббревиатура часового пояса, например. "EDT" для восточного летнего времени.
Вы можете получить то же самое из новой стандартной функции i18n «Intl.DateTimeFormat ()», но вы должны указать ей, чтобы она включала время с помощью параметров, иначе она просто выдаст дату.
источник
Это моя функция для часового пояса клиентов, она легкая и простая
источник
Проверь это:
источник
Только мои двое отправляют сюда
Я столкнулся с этой проблемой с датами, поэтому я сделал следующее:
Затем сохраните дату в базе данных, чтобы иметь возможность сравнить ее с некоторым запросом.
Установить
moment-timezone
источник
Не требуется moment.js: вот полный ответ туда и обратно из типа ввода "datetime-local", который выводит строку ISOLocal в UTCseconds в GMT и обратно:
источник
Мой ответ - небольшое отклонение для тех, кто просто хочет, чтобы сегодняшняя дата была в местном часовом поясе в формате ГГГГ-ММ-ДД.
Позвольте мне пояснить:
Моя цель: получить сегодняшнюю дату в часовом поясе пользователя, но в формате ISO8601 (ГГГГ-ММ-ДД)
Вот код:
Это работает, потому что в Швеции используется формат ISO 8601.
источник
Вот функции, которые я использовал для этого:
источник
Вы можете добиться этого с помощью нескольких простых методов расширения. Следующий метод расширения даты возвращает только компонент часового пояса в формате ISO, затем вы можете определить другой компонент для части даты / времени и объединить их для получения полной строки смещения даты и времени.
Пример использования:
Я знаю, что это 2020 год, и большинство людей, вероятно, уже используют Moment.js, но простое решение для копирования и вставки все еще иногда бывает удобно.
(Причина, по которой я разделяю методы даты / времени и смещения, заключается в том, что я использую старую библиотеку Datejs, которая уже предоставляет гибкий
toString
метод с настраиваемыми спецификаторами формата, но просто не включает смещение часового пояса. Следовательно, я добавилtoISOLocaleString
для всех, у кого нет сказала библиотека.)источник