Подтвердить что ты не робот

Как создать время в определенном часовом поясе с помощью момента. Js

У меня есть этот бэкэнд, который отправляет мне предварительно отформатированное время в заданном часовом поясе, но без какой-либо информации для указанного часового пояса. Строки похожи на: "2013-08-26 16:55:00".

Я могу создать новый экземпляр moment.js с помощью этой строки:

var time = moment("2013-08-26 16:55:00") //this creates time in my tz

но это создаст экземпляр только в моем часовом поясе.

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

Если я в Нью-Йорке, и я это делаю:

var time = moment("2013-08-26 16:55:00").tz("America/Los_Angeles");

результирующее время будет 13:55 вместо 16:55, но в LA.

Я хочу создать экземпляр, который скажет 16:55, но в LA время.

Причина, по которой я спрашиваю, заключается в том, что я хочу сделать это:

var now = moment.tz("America/Los_Angeles");
var end = moment("2013-08-26 16:55:00"); //plus something to convert LA time

var timeLeft = end.diff(now, "minutes");

Есть ли способ сделать это?

4b9b3361

Ответ 1

В большинстве случаев вы можете просто сделать это:

moment.tz("2013-08-26 16:55:00", "America/Los_Angeles")

Если вам нужен ввод, отличный от ISO8601, укажите строку формата в качестве второго параметра, а часовой пояс - как третий:

moment.tz("8/26/2013 4:55 pm", "M/D/YYYY h:mm a", "America/Los_Angeles")

И если вам нужно использовать режим "строгого разбора" в момент времени, то это идет в третьем параметре, а часовой пояс переходит в четвертую позицию:

moment.tz("8/26/2013 4:55 pm", "M/D/YYYY h:mm a", true, "America/Los_Angeles")

Ответ 2

Если вы хотите рассчитать все в определенном часовом поясе, вы хотите установить часовой пояс по умолчанию, используя

A) moment.tz.setDefault("America/Los_Angeles");

В моем случае использования (в проекте node.js) я просто устанавливаю его сразу после того, как требуются моменты времени так:

let moment = require('moment');
require('moment-timezone');
moment.tz.setDefault("America/Los_Angeles");

Все вызовы moment() после этого создадут время в настройке "Америка/Лос-Ангелы", которая НЕ совпадает с использованием:

B) moment.tz("2017-03-04 00:00", "America/Los_Angeles")

ИЛИ

C) moment("2017-03-04 00:00").tz("America/Los_Angeles")

оба из которых создадут объект момента в UTC (если вы уже не изменили значение по умолчанию), а затем преобразуйте его в часовой пояс Лос-Анджелеса.

Запуск B или C выше в консоли браузера дает:

_d: Fri Mar 03 2017 16:00:00 GMT-0800 (PST)
_i: "2017-3-4 00:00"

Уведомление _d показывает 3 марта 4:00 вечера; это связано с тем, что объект момента создается с 4 марта 12:00 в UTC, затем преобразуется в часовой пояс Pacific, что на 8 часов меньше/в предыдущий день.

источник: http://momentjs.com/timezone/docs/#/using-timezones/default-timezone/