0

This is in an Ionic based hybrid app on NodeJS.

Trying to convert a local time as specified by a user input to another timezone, yet it fails:

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;
}

Prints

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

1 回答 1

3

一些东西:

  • 您输入了moment.tzas a的输出string,但它实际上是一个Moment对象。

  • 当您调用JSON.stringify一个Moment对象时,它会返回 的输出.toISOString(),该输出始终采用 UTC。(Z表示 ISO 8601 格式的 UTC。)

  • 目前尚不清楚您的输入是一个string还是一个Date对象。如果是string,则Z表示 UTC,因此它总是被解释为 UTC。如果它是一个Date对象,那么Date将使用该对象表示的时间点 - 这取决于您如何构造该Date对象。无论哪种方式,您显示的值都是基于 UTC 的,而不是本地时间。

  • 目前尚不清楚您要完成什么。从您的变量名称来看,您似乎正在尝试转换localDateTimelocalTime,如果它们都是“本地”,则从逻辑上讲,这将给出相同的值。

    • 如果您尝试将值从本地时间转换为柏林时间,则:

      moment(yourInput).tz('Europe/Berlin')
      
    • 如果您尝试将值从洛杉矶时间转换为柏林时间,则:

      moment.tz(yourInput, 'America/Los_Angeles').tz('Europe/Berlin')
      
    • 如果您尝试将值从 UTC 转换为本地时间,则根本不需要时刻时区:

      moment.utc(yourInput).local()
      
  • 如果您需要字符串输出,那么您应该调用该format函数来生成一个字符串。您在此处显示的内容看起来像是在记录Moment对象而不是字符串。

于 2019-04-22T20:52:24.487 回答