[英]Moment & Timezone convert local time fails
这是在NodeJS上基于Ionic的混合应用程序中。
尝试将用户输入指定的本地时间转换为另一个时区,但失败:
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
一些东西:
您已经将moment.tz
的输出键入为string
,但这实际上是一个Moment
对象。
当您在Moment
对象上调用JSON.stringify
时,它将返回.toISOString()
的输出,该输出始终为UTC。 ( Z
表示ISO 8601格式的UTC。)
目前尚不清楚您的输入是string
还是Date
对象。 如果它是一个string
,则Z
表示UTC,因此它将始终被解释为UTC。 如果是Date
对象,则将使用该Date
对象表示的时间点-这取决于您构造Date
对象的方式。 无论哪种方式,您显示的值都是基于UTC的,而不是本地时间。
目前尚不清楚您要完成什么。 从变量名看来,您似乎正在尝试将localDateTime
转换为localTime
,如果它们都是“ local”,则在逻辑上将给出相同的值。
如果您尝试将值从本地时间转换为柏林时间,则:
moment(yourInput).tz('Europe/Berlin')
如果您尝试将值从洛杉矶时间转换为柏林时间,则:
moment.tz(yourInput, 'America/Los_Angeles').tz('Europe/Berlin')
如果您尝试将值从UTC转换为本地时间,则完全不需要moment-timezone:
moment.utc(yourInput).local()
如果需要字符串输出,则应调用format
函数以生成字符串。 您在此处显示的内容似乎是在记录Moment
对象而不是字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.