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

时间:2016-07-13 12:04:27

标签: javascript date datetime

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

在客户端,我使用var array = [{ id: 1, text: 'Some text', elements: [{ id: 1, pages: '45-67' }, { id: 2, pages: '12-34' }, { id: 4, pages: '12-5' }, { id: 5, pages: '12' }] }, { id: 3, text: 'Another text', elements: [{ id: 3, pages: '12-34' }] }]; array.sort(function (a, b) { return a.text.localeCompare(b.text); }); array.forEach(function (el) { el.elements.sort(function (a, b) { var aa = a.pages.split('-'), bb = b.pages.split('-'); return aa[0] - bb[0] || (aa[1] || 0) - (bb[1] || 0); }); }); console.log(array);来保存时间戳信息

Date.now()
  

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

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

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

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

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

现在,从var now = new Date(); time = now.getTime(); console.log(time); 构建日期并将其显示在浏览器的控制台中。

Date.now()

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

我也看到了converting Javascript date to UTC

的答案
var time = Date.now()
console.log(time);

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

console.log(date);

此代码仍然提供与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); Date.now()语句给出的相同的时间戳信息仅相差几毫秒,我认为这是由于代码执行时间而不是任何时区差异。执行时,以下是该时间实例的输出:

console.log

1468408292575 1468388492000 给出的UTC时间戳和时间戳之间有什么区别吗?

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

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

我想将此缩小到我想要显示时区信息的级别,仅用于显示目的,例如在HTML中,在生成的文件中。

我的问题可能过于简单,因为我很难看到Date class documentation正确使用它来避免时差问题。

2 个答案:

答案 0 :(得分:0)

两者通常相同

var dt1 = Date.now(); is little faster

以获取更多参考资料

Link 1

Link 2

答案 1 :(得分:0)

我发布了一个 answer on date and timezone related question。回答说客户端生成的日期的内部记录为零时区偏移。只需添加个别问题的答案:

<块引用>

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

是的

<块引用>

这段代码仍然给出相同的时间戳信息(在零时区 抵消)。 Date.now() 只是获取时间戳的快捷方式吗?

是的

<块引用>

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

没有