Я использую Moment.js для анализа и форматирования дат в своем веб-приложении. Как часть объекта JSON, мой внутренний сервер отправляет даты в виде количества миллисекунд от эпохи UTC (смещение Unix).
Разбор дат в определенном часовом поясе прост - просто добавьте идентификатор часового пояса RFC 822 в конец строки перед анализом:
// response varies according to your timezone
const m1 = moment('3/11/2012 13:00').utc().format("MM/DD HH:mm")
// problem solved, always "03/11 17:00"
const m2 = moment('3/11/2012 13:00 -0400').utc().format("MM/DD HH:mm")
console.log({ m1, m2 })
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
Но как мне отформатировать дату в определенном часовом поясе ?
Я хочу получать стабильные результаты независимо от текущего времени браузера, но не хочу отображать даты в формате UTC.
javascript
timezone
momentjs
quietmint
источник
источник
DD MMM, YYYY
не работает, когда я использую его какmoment.tz("2018-02-15T14:20:00.000+0530", "Asia/Bangkok").format("DD MMM, YYYY")
. Может кто-то указать мне в документации, где я могу найти все ключи для форматирования времени при использовании этого API."15 Feb, 2018"
. Вы хотели использовать форматную строкуDD MMMM, YYYY
для получения"15 February, 2018"
?Ответы:
Как указано в ответе Манто ,
.utcOffset()
это предпочтительный метод с момента 2.9.0. Эта функция использует реальное смещение от UTC, а не обратное смещение (например, -240 для Нью-Йорка во время летнего времени). Смещенные строки типа «+0400» работают так же, как и раньше:Более старый
.zone()
как сеттер был объявлен устаревшим в Moment.js 2.9.0. Он принял строку, содержащую идентификатор часового пояса (например, «-0400» или «-04: 00» для -4 часов) или число, представляющее минуты после UTC (например, 240 для Нью-Йорка во время летнего времени).Чтобы работать с именными часовыми поясами вместо числовых смещений, включите часовой пояс Moment и используйте
.tz()
вместо него:источник
.zone()
в качестве получателя, который возвращает минуты от UTC (например, возвращает 300 для Нью-Йорка в течение стандартного времени)..tz("America/Phoenix")
если вы включаете momentjs.com/timezone . Я обновил ответ с примером.Использовать момент-часовой пояс
Прежде чем вы сможете получить доступ к определенному часовому поясу, вам необходимо загрузить его так (или использовать альтернативные методы, описанные здесь )
источник
В нескольких ответах уже упоминается, что момент-часовой пояс - это путь к названному часовому поясу. Я просто хочу прояснить кое-что об этой библиотеке, что довольно смущает меня. Есть разница между этими двумя утверждениями:
Предполагая, что часовой пояс не указан в дате, переданной в:
Первый код принимает дату и предполагает, что часовым поясом является тот, который был передан. Второй принимает дату, принимает часовой пояс из браузера, а затем изменяет время и часовой пояс в соответствии с переданным часовым поясом.
Пример:
Мой часовой пояс +5 от UTC. Таким образом, в первом случае он не изменяется и устанавливает дату и время для часового пояса utc.
Во втором случае предполагается, что переданная дата находится в -5, а затем преобразуется в UTC, и поэтому она выплевывает дату «2018-07-18T00: 00: 00Z».
ПРИМЕЧАНИЕ. Параметр формата действительно важен. Если пропущенный момент может вернуться к классу Date, это может привести к непредсказуемому поведению
Предполагая, что часовой пояс указан в дате, переданной в:
В этом случае они оба ведут себя одинаково
Несмотря на то, что теперь я понимаю, почему это так, я подумал, что это довольно запутанная особенность, которую стоит объяснить.
источник
.zone () устарела, и вы должны использовать вместо нее utcOffset:
источник
У меня была такая же проблема с Moment.js. Я установил момент-часовой пояс, но проблема не была решена. Затем я сделал только то, что здесь показано, установил часовой пояс, и он работает как шарм:
Большое спасибо!
источник
new Date()
конструктор. Момент предоставляет все, что вам когда-либо нужно для анализа дат. Смотрите парсинг документов.new Date()
внутренне), но это несовместимо с браузерами . Вместо этого вы должны использовать предполагаемый формат в качестве второго аргумента. Пример:moment("12-25-1995", "MM-DD-YYYY")
.Просто пришёл этот вопрос, и, поскольку у меня возникла та же проблема, я бы просто опубликовал результаты, которые придумали
при синтаксическом анализе вы можете обновить смещение (т.е. я анализирую данные (1.1.2014) и мне нужна только дата, 1 января 2014 года. В GMT + 1 я получу 31.12.2013. Поэтому сначала я смещаю значение.
Ну, мне пригодилась поддержка часовых поясов
В
источник
Вы можете попробовать это,
Здесь вы можете получить дату на основе часового пояса клиента (браузера).
Регулярное выражение в основном возвращает значение смещения.
Ура !!
источник