时刻没有给出相同的值

问题描述 投票:0回答:1
var a = moment().toISOString(true)
var b = moment();
var c = moment(b.toISOString(true));
console.log(a);// 2024-04-15T00:09:47.226+01:00 --->here time is one hour ahead
console.log(b);//"2024-04-14T23:09:47.472Z"
console.log(c);//"2024-04-14T23:09:47.472Z"

请帮我理解以下内容

javascript react-native expo momentjs moment-timezone
1个回答
0
投票
2024-04-14T12:00:00.000Z
2024-04-14T13:00:00.000+01:00

这两个 ISO 字符串均指同一绝对时间点,通常称为“即时”。它们都对应于 Unix 时间 1713096000000

它们的时区信息不同。两者(!)都是

zoned

,第一个字符串采用UTC(固定偏移量+00:00),由末尾的

Z
表示,第二个字符串的时区偏移量为
+01:00
。另请注意:
时区偏移量与时区不同
,但这种区别对于这种特定用途来说并不重要。

两种表述对于其绝对时间都是正确的

。哪一种适合取决于时区偏移是否与您的应用程序的需求相关。如果您只关心绝对时间(例如,如果您只想显示“10 分钟前创建”),那么两者都可以。

有时偏移量是相关的

,例如,如果您想显示“员工上午 8 点登录”之类的内容,则应该是该员工各自的当地时间。考虑到员工在 +01:00 而您在

-05:00
,如果转换为 UTC 并以 UTC 格式显示,则会显示“员工于上午 9 点登录”,或者如果显示为您的当地时间“员工于下午 2 点登录” ”.

还有一些日期与任何时区偏移无关

。它们被称为“普通日期”。生日就是一个很好的例子,因为将 2024-04-14T00:00:00.000Z 显示为 -01:00 的当地时间会给出错误的日期

2024-04-13
重要提示:如果不知道时区偏移量,则无法将普通日期映射到绝对时间。在员工登录示例中,如果您只想显示该消息,则可以使用普通日期(在员工本地时区创建),但用于其他用例(例如“员工 3 小时前登录”)是不正确的,因为你无法知道绝对时间点。许多日期库会很乐意将普通日期解析为本地日期,这
通常是不正确的
,但只有当来自不同时区的人使用您的应用程序时才会注意到。

结论: 基本上每次以编程方式捕获日期时,它都应该是绝对时间。偏移量是否重要以及如何处理它取决于用例。

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