JS的getTime()是否适用于非UTC时区用户?

时间:2019-03-07 15:30:34

标签: javascript date utc gettime

我想使用此数据包在Web应用程序中处理Cookie

https://github.com/js-cookie/js-cookie

在我的Web应用程序中,我的任务是在用户执行某些操作时延长cookie的过期时间(15分钟)。 要延长过期时间,请使用以下指南:

https://github.com/js-cookie/js-cookie/wiki/Frequently-Asked-Questions#expire-cookies-in-less-than-a-day

我的问题是,使用getTime()函数(始终以UTC返回时间)的这段代码是否与使用其他时区的用户正确工作?

例如,如果用户具有CST时区(与UTC相差6个小时),则cookie是否正确过期(15分钟)或不正确(6小时15分钟)? 如果不是,您是否有任何想法来改进此代码?谢谢。

2 个答案:

答案 0 :(得分:2)

Date#getTime

  

getTime()始终使用UTC进行时间表示。例如,一个时区中的客户端浏览器getTime()将与其他时区中的客户端浏览器相同。

时间戳始终采用UTC。

  

例如,如果用户具有CST时区(与世界标准时间(UTC)相差6个小时),则cookie是否正确过期(15分钟)或不正确(6小时15分钟)?

否,因为时间是CST而不是UTC,所以“ getTime()上面的引号也将与任何其他时区的客户端浏览器相同”。

答案 1 :(得分:1)

此处的时区没有问题。示例代码可以正常工作。

如果要模拟其他时区发生的情况,只需更改系统的时区设置。在Windows中,右键单击时钟,然后选择“调整日期/时间”。

如果您在响应中查看set-cookie标头,则会在UTC中看到expires属性。浏览器非常清楚如何处理UTC。只要正确设置了自己的时钟和时区,一切都会按预期进行。这是非常基本的东西。这里没有问题!

Javascript dates have no notion of timezone,因此javascript中没有UTC Date对象。当您调用getTime()时,将显示Date对象的全部内容-这只是一个数字,因此getTime()也没有时区的概念。 new Date()为您提供代表当前时刻的数字。再一次,没有时区的概念。到处都做同样的事情。