MomentJS,如何忽略用户的本地时区并使用

问题描述 投票:0回答:1

这里是场景:

1-用户打开网站,然后使用下拉字段输入07:00,这将为我提供::>

// 1578600000000 =>保存到数据库// 2020年1月10日星期五格林尼治标准时间+1100(澳大利亚东部夏令时间)

用户本人位于悉尼

中,这意味着他的本地时钟位于GMT+1100

但是,他想将这次代表亚洲/德黑兰的时间,因为那是他明天要去的地方。因此,本质上,他希望我完全忽略他的当地时间

,并把他看作他在亚洲/德黑兰。因此,当他明天在Tehran中时,他可以看到日历上有07:00am

另一方面,从Australia/Perth开始,全世界的人们都会看到他的可用时间。

根据momentJS文档,我认为类似下面的工作,但没有。

首先,将时区转换为Asia/Tehran,这是用户所需的位置:

const desiredTimeZone = 'Asia/Tehran';
let OriginalDesired = moment.tz(1578600000000,desiredTimeZone);

然后,在Australia/Perth中向人们展示时,请确保它在他们的时区内>

const PerthTimeZone = 'Australia/Perth`; // this is dynamic, can be anything

OriginalDesired.clone().tz(PerthTimeZone);

我天真的认为这应该可行。但是我注意到原始时间戳1578600000000UTC时间戳,这意味着它不是真正的07:00am,实际上是20:00pm,因为Javascript已从用户条目中减去11小时,这是非常原始的用户本地时区的偏移量。

我设法以一种戏剧性的方式通过增加和减少偏移量来解决它,但是它仅在一种情况下起作用。

const originalTime = 1578600000000;
const LocalAdjustment = moment(originalTime).tz("Australia/Sydney").utcOffset() * 60000;

const DesiredAdjustment = moment(originalTime).tz("Asia/Tehran").utcOffset() * 60000;
const newUTC = originalTime + LocalAdjustment - DesiredAdjustment;

并且在Tehran中将其表示给用户时>

  moment(newUTC).tz("Asia/Tehran").format('hh:mma'); // 07:00am.

我知道这可能很愚蠢,显然只能在一种情况下使用,但这是我要走的正确道路吗?还是有更简单的方法?

顺便说一下,所有计算都在我的服务器上,即'UTC'。

[这里是场景:1-用户打开网站,并使用下拉字段输入上午07:00,这将为我提供以下信息:// 1578600000000 =>保存到数据库//格林尼治标准时间2020年1月10日07:00:00 GMT +1100(澳大利亚...

您说:

1-用户打开网站,并使用下拉字段输入上午07:00,这将为我提供:// 1578600000000 ...

您已经迷路了。如果本地时区不相关,则不要编写假定与当地时区相关的代码。

换句话说,您可能有类似的东西:

moment("2020-01-10 07:00")

相反,您应该有类似的东西:

moment.tz("2020-01-10 07:00", "Asia/Tehran")

或更确切地说,您应该只将"2020-01-10 07:00""Asia/Tehran"发送到您的数据库,然后在需要知道代表什么时刻时将它们检索并传递给moment-timezone。

关于您的其他方法,从时间戳中添加或减去时区偏移通常不是一个好主意。 Unix时间戳本质上是基于UTC的。加法或减法会产生不同的时间,而不是针对时区进行调整。 (有关此逻辑差异的幽默可视化,请参见this Dilbert cartoon。)

考虑到您的代码返回的偏移量不正确的可能性也很小(但并非不可能),因为在查找之前必须将其偏移。换句话说,德黑兰在所讨论的日期是UTC + 3:30,因此必须将传递给时间戳构造函数的时间戳调整3小时3分钟。这导致循环逻辑,并且难以解决。它将显示过渡附近的时间戳(DST或特定时区的标准时间更改)。

javascript timezone momentjs timezone-offset
1个回答
0
投票

您说:

© www.soinside.com 2019 - 2024. All rights reserved.