Javascript 中的 Date.now 和 Date.getTime 有什么区别以及时区如何影响它们?

Rit*_*gga 6 javascript datetime date

我试图了解当客户端和服务器的时区可能不同时,在客户端和服务器上使用 Javascript 创建日期如何影响查询结果。

在客户端,我Date.now()用来保存时间戳信息

var time = Date.now()
console.log(time);
Run Code Online (Sandbox Code Playgroud)

now() 方法以数字形式返回自 1970 年 1 月 1 日 00:00:00 UTC 到现在经过的毫秒数。

我的理解是,这个时间戳与任何时区偏移无关,换句话说,它指向零时区偏移的时间。这是正确的吗?.

我们还可以使用以下代码获取此时间戳

var now = new Date();
time = now.getTime();
console.log(time);
Run Code Online (Sandbox Code Playgroud)

此代码仍然提供相同的时间戳信息(零时区偏移)。Date.now() 只是获取时间戳的快速方法吗?

现在,从Date.now()浏览器的控制台构建日期并将其显示出来。

var time = Date.now()
console.log(time);

var date = new Date(time)
var time = date.getTime()
console.log(time);

console.log(date);
Run Code Online (Sandbox Code Playgroud)

在我看来,只有在浏览器的控制台中显示时,日期才会在浏览器的本地时区中格式化,否则此日期实例仍将时间戳记为零时区偏移量。这是正确的吗?.

我还看到了将 Javascript 日期转换为 UTC的答案

var now = new Date();
var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),  now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());
time = now_utc.getTime();
console.log(time);
Run Code Online (Sandbox Code Playgroud)

这段代码仍然提供与给出的相同时间戳信息,Date.now()并且console.log语句仅相差几毫秒,我认为这是由于代码执行时间而不是任何时区差异。执行时,以下是该时间实例的输出:

1468408292575
1468388492000
Run Code Online (Sandbox Code Playgroud)

UTC 时间戳和由 给出的时间戳之间有什么区别Date.now()吗?

您能否确认这三个选项是否产生相同的结果(即独立于任何时区),以及当客户端和服务器处于不同时区时使用此时间戳信息进行交互是否安全。例子:

  • 客户端向服务器端发送保存请求以保存此客户端生成的时间戳?
  • 客户根据这个保存的时间戳询问结果?

我想将其降低到我只想显示时区信息的级别,例如仅用于显示目的,例如在 HTML 中,在生成的文件中。

我的问题可能太简单了,因为我对正确使用Date 类文档以避免时差问题感到困惑。

Rit*_*gga 2

我发布了有关日期和时区相关问题的答案。答案说客户端生成的日期的内部记录处于零时区偏移。只需添加个别问题的答案:

我的理解是,这个时间戳独立于任何时区偏移,换句话说,它指向零时区偏移的时间。这是对的吗?。

是的

此代码仍然提供相同的时间戳信息(在零时区偏移处)。Date.now() 只是获取时间戳的快速方法吗?

是的

UTC 时间戳和 Date.now() 给出的时间戳之间有什么区别吗?