我在Windows 7(64位)计算机上使用Firefox。我的任务是最近修复一个错误,导致此代码生成一些错误的本地时间戳
var d = new Date(0);
d.setSeconds(epoch);
我不知道为什么会这样写,有没有理由这么做?如果我使用new Date(epoch * 1000);
直接设置它,它就会起作用,setUTCSeconds
也会起作用。
第二个问题是Firefox在白天真正的时候会说“东方标准时间”。 Chrome不会这样做。
Javascript是一种语言,我知道服务脚本的基础知识,但是,我来自C和C ++。这里有什么我想念的吗?我已经审核了Date
,我无法找出修复代码的最佳方法,或者为什么它按原样编写。所有内容都具有相同的getTimezoneOffset
,如下所示。
var d = new Date(1476428709 * 1000);
alert(d.toTimeString());
Chrome :03:05:09 GMT-0400(东部夏令时间)。 valueOf:1476428709000
Firefox :03:05:09 GMT-0400(东部标准时间) valueOf:1476428709000
var d = new Date(0);
d.setSeconds(1476428709);
alert(d.toTimeString());
Chrome :02:05:09 GMT-0400(东部夏令时间)。 valueOf:1476425109000
Firefox :02:05:09 GMT-0400(东部标准时间) valueOf:1476425109000
Firefox 使用
setUTCSeconds
:03:05:09 GMT-0400(东部标准时间):1476428709000
编辑:日光时间问题似乎是Firefox中的一个错误:
879261 – javascript seems to be using time zones backwards
答案 0 :(得分:0)
我的任务是最近修复一个错误,导致一些基本上
var d = new Date(0); d.setSeconds(epoch);
的代码造成一些糟糕的本地时间戳。我不知道为什么会这样写,是否有充分的理由这样做?
没有。指定new Date(millisecondsSinceEpoch)
可以正常工作。也许这是针对特定实现中的错误的解决方法。
如果我像Date(epoch * 1000)一样直接设置它会起作用,也会设置为AVCSeconds。
将单个数字值传递给Date constructor时,自纪元以来它被视为UTC毫秒,所以:
var d = new Date(number)
相当于:
var d = new Date(0);
d.setUTCMilliseconds(number);
第二个问题是Firefox在东部标准时间是白天时间。 Chrome不会这样做。
本地时区偏移量是从主机确定的,它与语言无关,因此可能是实施问题。
当你这样做时:
d.setSeconds(1476428709)
秒的任何溢出都会添加到日期的其余部分,它不会被用作纪元的偏移量。因此,如果 d 是一个Date实例,那么:
d.setSeconds(1476428709);
和
d.setUTCSeconds(1476428709);
返回相同的结果,例如
var a = new Date();
var b = new Date(+a);
a.setSeconds(1476428709);
b.setUTCSeconds(1476428709);
console.log(a, b);