Момент Часовой пояс JS возвращает истинную дату преобразования при разработке, но возвращает неправильную в производстве - PullRequest
0 голосов
/ 23 января 2020

Я сделал преобразование времени между исходным временем «Азия / Джакарта» (GMT + 7) и «Азия / Токио» (JST). Фактическая разница составляет 2 часа (GMT + 7 00:00, JST 02:00). В процессе разработки возвращается истинное значение, подобное следующему:

24 Januari 2020, 00:00 GMT+7 
24 Januari 2020, 02:00 JST

Но при загрузке на рабочий сервер (сервер был размещен в Нью-Йорке, США), преобразование было неверным. Возвращаясь

24 Januari 2020, 00:00 GMT+7 
24 Januari 2020, 09:00 JST

Я думал, что мне нужно установить часовой пояс по умолчанию, но ошибка становилась все хуже. И получил

25 Januari 2020, 07:00 GMT+7
25 Januari 2020, 09:00 JST

Вот код, который я пишу:

// calling the modules
const moment = require('moment');
const momentTz = require('moment-timezone');

//... initializing code

moment.locale('id');
moment.tz.setDefault('Asia/Jakarta');
// args[1] = '24/01'
// args[2] = '00:00'
      try {
        const timeFormat = 'Do MMMM YYYY, HH:mm';
        const dateSplit = args[1].split('/');
        const date =
          dateSplit[1] + '/' + dateSplit[0] + '/' + moment().format('YYYY');
        const dateTime = Date.parse(`${date} ${args[2]}`);
        const livestreamDateTime = moment(dateTime).format(timeFormat);
        const livestreamDateTimeJapan = momentTz
          .tz(dateTime, 'Asia/Tokyo')
          .format(timeFormat);
        const vliverFirstName = args[0].toLowerCase();
        const vData = vliver[vliverFirstName];
        const youtubeId = args[3];
// ...
// ... showing the output and catching error underneath

Дата, которую я получил от ввода пользовательского ввода. Поэтому, когда пользователь вводит 24/01 00:00, он говорит, что дата 24 January 2020 00:00 GMT+7

РЕДАКТИРОВАТЬ: Я проверил дату производственного сервера. Он показывает мой часовой пояс GMT + 7.

Server Time and Time

1 Ответ

1 голос
/ 23 января 2020

Исправлена ​​проблема.

Потому что разница во времени фактически составляет 2 часа. И мне нужно сравнить только 2 часовых пояса, поэтому мне нужно добавить введенную дату и время на 2 часа. И также не установлен часовой пояс по умолчанию

const date = dateSplit[1] + '/' + dateSplit[0] + '/' + moment().format('YYYY');
const dateTime = Date.parse(`${date} ${args[2]}`);
const livestreamDateTime = moment(dateTime).format(timeFormat);
const livestreamDateTimeJapan = moment(dateTime)
  .add(2, 'hours')
  .format(timeFormat);

Он все равно возвращается как тот же часовой пояс. Но я думаю, что это не имеет большого значения, потому что я скрываю часовой пояс и заменяю его жестко закодированной строкой.

...