我在控制台中键入了“日期”...我得到Tue Sep 20 01:01:49 PDT 2011
...这是正确的。
但是我在node.js中这样做了,我得错了。
var ts = String(Math.round(new Date().getTime() / 1000));
输出为:1316505706,落后一小时。
答案 0 :(得分:8)
@KARASZI关于根本原因绝对正确:除非你操纵它们,否则Unix时间戳总是UTC。我建议如果你想要一个Unix时间戳,你应该把它留在UTC中,如果你需要向用户显示格式化的时间,只能转换为本地时间。
这样做的第一个好处是所有服务器都可以“同时”说话。例如,如果您已将服务器部署到Amazon EC2 US East和Amazon EC2 US West并且它们共享一个公共数据库,则可以在数据库和服务器上使用UTC时间戳,而无需每次都担心时区转换。这是使用UTC时间戳的一个很好的理由,但它可能不适用于您。
这样做的第二个好处是,您可以根据经过的时间来衡量事物,而不必担心夏令时(或时区,如果您正在测量正在移动的平台上的时间!)。这不会出现太大的问题,但是如果你因为本地时间在你测量的时候“倒退”了一个小时就会出现负面时间的情况,你就会非常困惑!
我能想到的第三个原因是非常小的,但是一些性能极客会非常欣赏它:你可以通过使用Date类的“now”函数获得原始UTC时间戳,而无需每次都分配一个新的Date对象。 / p>
var ts = Date.now() / 1000;
答案 1 :(得分:4)
原因是getTime
函数返回UTC时区的时间:
getTime方法返回的值是自1970年1月1日00:00:00 UTC以来的毫秒数。您可以使用此方法来帮助为另一个Date对象指定日期和时间。
如果要在当前时区中获取UNIX时间戳,可以使用getTimezoneOffset
方法:
var date = new Date();
var ts = String(Math.round(date.getTime() / 1000) + date.getTimezoneOffset() * 60);
答案 2 :(得分:1)
请注意,您可以使用node.js软件包(如timezonecomplete或timezone-js)来避免这种混淆,这些软件包的接口在日期和时间操作方面的错误要小得多。
答案 3 :(得分:-4)
date
将返回服务器时间,而在网页上使用JavaScript将返回客户端的本地时间。