gpt4 book ai didi

javascript - 奇怪的 Javascript 时区与 Date()

转载 作者:行者123 更新时间:2023-12-03 00:59:28 24 4
gpt4 key购买 nike

Javascript 在这里毫无希望,但我遇到了一个我似乎无法理解的问题,并且不知道它是否是 JS 中定义的行为......

据我所知,new Date() 返回浏览器报告的当前时区的当前时间。在撰写本文时,我位于意大利米兰(GMT +0200 CEST),因此在执行以下操作时:

var date = new Date();
console.log(date);
console.log(date.getTimezoneOffset());

正如预期的那样,我得到了:

Sun Oct 07 2018 15:42:12 GMT+0200 (Central European Summer Time)
-120

但是,根据我的理解,将毫秒放入日期构造函数中会创建一个基于大纪元时间的日期,即 1970 年 1 月 1 日 00:00:00 GMT +0000 - 那么为什么我执行:

var date = new Date(0); // Note The 0
console.log(date);
console.log(date.getTimezoneOffset())

我得到:

Thu Jan 01 1970 01:00:00 GMT+0100 (Central European Standard Time)
-60

浏览器是否出于某种原因更改了它认为我所在的时区?这给我从数据库检索 unix 时间戳并将其显示在用户当前时区中带来了很多问题!

对此的任何帮助或建议将不胜感激!

非常感谢! :)

最佳答案

每个 Date 实例中的数字时间戳值,无论它是如何构造的,都表示相对于固定 UTC“纪元”时间的偏移量。当您在区域设置中构建日期时,在设置 Date 实例时间戳时会考虑时区偏移量。当您通过与语言环境相关的 API(例如 .getTimezoneOffset())访问部分日期时,也会考虑时区偏移。

因此,重要的是如何从 Date 实例中获取日期/时间信息。如果您使用 UTC API,您将获得 UTC 时间信息。如果您使用区域设置相关的 API,您将获得区域设置相关的值。

let d = new Date();
console.log("locale-relative: " + d);
console.log("UTC: " + d.toUTCString());

现在,至于如何处理数据库中的系统时间戳值,这取决于应用程序的工作方式以及日期在该上下文中的含义。如果用户根据服务器将如何处理日期来查看日期很重要,请使用与区域设置相关的 API 来格式化服务器上​​的日期。如果您的应用程序根据本地时间执行一些工作,那就有意义了。例如,某些银行应用程序(在美国)在晚上执行操作,但“夜间”是指美国大陆的深夜时间。

另一方面,如果您存储的日期应按照用户的区域设置向用户显示,则向客户端发送时间戳,并在客户端将日期格式化为具有区域设置的字符串- 相关 API。这对于允许用户设置闹钟等的应用程序来说是合适的:通常,用户根据自己的本地时间进行思考是有意义的。

关于javascript - 奇怪的 Javascript 时区与 Date(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52689119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com