Момент и часовой пояс конвертировать местное время не удается - PullRequest
0 голосов
/ 22 апреля 2019

Это гибридное приложение на основе Ionic на NodeJS.

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

static MTL_local_time_to_server(aDateTime:moment.Moment):moment.Moment{
    console.log(aDateTime.format('MMMM Do YYYY, h:mm:ss a'));

    const localTime:moment.Moment = momenttz.tz(aDateTime, momenttz.tz.guess());
    console.log(localTime.format('MMMM Do YYYY, h:mm:ss a'), momenttz.tz.guess());
    const returnTime:moment.Moment = momenttz(localTime).tz("Europe/Berlin");
    console.log(returnTime.format('MMMM Do YYYY, h:mm:ss a'));
    return returnTime;
}

Печать

April 22nd 2019, 12:00:00 am 
April 22nd 2019, 12:00:00 am America/Los_Angeles 
April 22nd 2019, 9:00:00 am

1 Ответ

3 голосов
/ 22 апреля 2019

Несколько вещей:

  • Вы напечатали вывод moment.tz как string, но на самом деле это Moment объект.

  • Когда вы вызываете JSON.stringify для объекта Moment, он возвращает вывод .toISOString(), который всегда находится в UTC.(Z указывает UTC в формате ISO 8601.)

  • Не ясно, является ли ваш ввод объектом string или Date.Если это string, то Z обозначает UTC, поэтому он всегда будет интерпретироваться как UTC.Если это объект Date, то будет использоваться момент времени, представленный этим объектом Date, который зависит от того, как вы построили объект Date.В любом случае, отображаемое вами значение основано на UTC, а не на местном времени.

  • Не совсем ясно, что именно вы пытаетесь достичь.Из ваших имен переменных может показаться, что вы пытаетесь преобразовать localDateTime в localTime, что логически даст одинаковое значение, если они оба будут "локальными".

    • Есливы пытаетесь преобразовать значение из местного времени в берлинское, а затем:

      moment(yourInput).tz('Europe/Berlin')
      
    • Если вы пытаетесь преобразовать значение из времени Лос-Анджелеса в берлинское время, то:

      moment.tz(yourInput, 'America/Los_Angeles').tz('Europe/Berlin')
      
    • Если вы пытаетесь преобразовать значение из UTC в местное время, вам вообще не нужен момент-часовой пояс:

      moment.utc(yourInput).local()
      
  • Если вам нужны строковые выходы, то вы должны вызвать функцию format для получения строки.То, что вы здесь показали, выглядит так, как будто вы регистрируете Moment объекты, а не строки.

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