我正在使用momentjs#timezone
lib将otherGrass
转换为时区,反之亦然。
现在,面临转换方面的问题。
她是我的代码。
UTC
现在,想再次进入UTC
var myDate = "2019-05-11 18:22:40" //stored in DB utc format
myDate = timezone(myDate).tz("America/Los_Angeles").format("YYYY-MM-DD HH:mm:ss"); //converted in America/Los_Angeles Timezone
//output : myDate = "2019-05-11 05:52:40"
但输出即将到来myDate = timezone.tz(myDate, "America/Los_Angeles"); //added tz
myDate = timezone(myDate).tz("utc").format("YYYY-MM-DD HH:mm:ss");
“与输入"2019-05-11 12:52:40
不同。
我在这里做错什么了吗?
答案 0 :(得分:1)
当您从字符串中创建一个时刻并且未指定时区时,时刻会假定它是当地时间。根据{{3}}:
moment(...)是本地模式。假设输入不明确(无偏移) 是当地时间。明确的输入(带偏移)调整为本地 时间。
因此,“ 2019-05-11 18:22:40”将被即时读取为本地时区中的日期。
您可以使用moment.utc("2019-05-11 18:22:40")
假定它是UTC。
这意味着要像这样更改代码:
var myDate = "2019-05-11 18:22:40" //stored in DB utc format
myDate = timezone.utc(myDate).tz("America/Los_Angeles").format("YYYY-MM-DD HH:mm:ss");
但是理想情况下,您的数据库应该使用the moment docs来存储/返回日期,以显示时间,以便时区清晰,即“ 2019-05-11T18:22:40Z”。 “ Z”表示UTC,因此如果您调用moment("2019-05-11T18:22:40Z")
,此刻将自动将其解析为UTC。