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"
请帮我理解以下内容
2024-04-14T12:00:00.000Z
2024-04-14T13:00:00.000+01:00
这两个 ISO 字符串均指同一绝对时间点,通常称为“即时”。它们都对应于 Unix 时间 1713096000000
。
,第一个字符串采用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 小时前登录”)是不正确的,因为你无法知道绝对时间点。许多日期库会很乐意将普通日期解析为本地日期,这通常是不正确的,但只有当来自不同时区的人使用您的应用程序时才会注意到。
结论: 基本上每次以编程方式捕获日期时,它都应该是绝对时间。偏移量是否重要以及如何处理它取决于用例。