momentJS: неверная временная метка даты в другом часовом поясе - PullRequest
1 голос
/ 24 апреля 2019

Существует один вход времени, то есть start_time

Я пытаюсь получить метку времени в миллисекундах для этих входов

let start_time = "17:05:00";
var start_date_moment = moment(start_time, "HH:mm:ss");
console.log(start_timestamp);
output is -> moment("2019-04-24T17:05:00.000")

Этот вывод остается неизменным на сервере и локальном

Но когда я пытаюсь получить метку времени Unix в миллисекундах таким же образом

var start_timestamp = moment(start_time, "HH:mm:ss").valueOf();

На сервере в другом часовом поясе

console.log(start_timestamp);//1556125500000
console.log(moment(start_timestamp/1000).format('YYYY-MM-DD HH:mm:ss'); //2019-04-24 17:05:00

На локальном

console.log(start_timestamp);//1556105700000
console.log(moment(start_timestamp/1000).format('YYYY-MM-DD HH:mm:ss'); //2019-04-24 22:35:00

ЭтоЗначение start_timestamp отличается на локальном и на сервере.Но временная метка не должна изменяться в зависимости от часового пояса, она должна оставаться одинаковой для всех часовых поясов.Пожалуйста, помогите мне с этим.

Как получить правильное и одинаковое значение в обоих местах.Я получил эту ссылку кое-что, что связано с этим https://github.com/moment/moment/issues/2035

Нет проблем с датами в каком-либо конкретном формате, проблема только с отметкой времени.

1 Ответ

1 голос
/ 24 апреля 2019

При использовании момента необходимо учитывать смещение (используя timezones moment.js ).Поскольку на входе не было смещения, момент будет зависеть от часового пояса компьютера, на котором работает код, и, следовательно, от других значений ..

Пример:

var a = moment.tz("2013-11-18 11:55", "Asia/Taipei");
var b = moment.tz("2013-11-18 11:55", "America/Toronto");

a.format(); // 2013-11-18T11:55:00+08:00
b.format(); // 2013-11-18T11:55:00-05:00

a.utc().format(); // 2013-11-18T03:55Z
b.utc().format(); // 2013-11-18T16:55Z

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

A Unix Timestamp равна всегда на основе UTC - вы можете видетьэто такая же временная метка в любой точке мира.

Редактировать:

Если вы используете utcOffset, вы должны передать целое число:

Пример:

moment.utc("2015-10-01 01:24:21").utcOffset("-240").format('YYYYMMDD HHmmss ZZ')
// "20151001 012421 +0000"

moment.utc("2015-10-01 01:24:21").utcOffset(-240).format('YYYYMMDD HHmmss ZZ')
// "20150930 212421 -0400"

MomentJS позволяет передавать аргументы смещения в виде строки, но он ожидаетстрока в одном из форматов ISO8601: [+/-]HH:mm или [+/-]HHmm.

Чтобы избежать всего этого вместе, вы можете, если известно, передать местоположение в качестве аргумента, например

 moment.tz(start_time, "HH:mm:ss", "Asia/Kolkata").valueOf();

как упомянуто в первом примере выше ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...