javascript - Unix 格式的 GMT/UTC(非本地)时间

标签 javascript unix time utc gmt

我正在使用 JavaScript 并尝试获取 Unix 格式的 GMT+0/UTC+0 时间(也称为祖鲁时间)。

我已经设法以 Unix 格式获取本地时间,如下所示:

var datetime = new Date()
var unixtime = Math.floor(Number(datetime/1000));

但是当我尝试对 UTC 时间执行相同操作时...

var datetime = new Date()
var year = datetime.getUTCFullYear()
var month = datetime.getUTCMonth()
var day = datetime.getUTCDate()
var hours = datetime.getUTCHours()
var minutes = datetime.getUTCMinutes()
var seconds = datetime.getUTCSeconds()
var unixtime = (Date.UTC(year,month,day,hours,minutes,seconds,00)/1000);

它失败了。我只是以 Unix 格式获取本地时间。

您可以在此处实时运行它:http://jsfiddle.net/wC8XH/1/ (也在pastebin上:http://pastebin.com/uDD5zUah)

这是输出示例:

2012-01-30 23:15:19 = 1327958119
2012-01-30 21:15:19 = 1327958119

正在做:

date -d "2012-01-30 21:15:19" +%s

在 Linux 上给我的是 1327950919,而不是 1327958119。差别是 7200 秒,即 2 小时,这是我的时区 (+0200)。

因此,如果我只是想要人类可读的格式,我可以获得 UTC+0 时间,但当我请求 Date.UTC 将其转换为 Unix 格式时,它会选择转换我的本地时间。

我错过了什么吗?

最佳答案

是的,你把问题搞颠倒了。

Javascript 总是以“Unix 格式”告诉您 UTC 或 GMT 的秒数。因为 Unix 内部始终以 UTC 或 GMT 工作。在没有 UTC 的情况下谈论“Unix 时间”是没有意义的。

因此,您的两个 Javascript 代码片段以一种简单的方式和一种非常冗长的复杂方式找到相同的正确答案(当前的“unix 时间”是多少?),这就是为什么它们给出相同的结果。

...并且日期命令是区域设置敏感的。在您的区域设置中,您有 2 小时的偏移量,因此它假定您的日期字符串有 2 小时的偏移量。您可以使用 -u 标志告诉它不要这样做,这意味着您保证您的字符串采用 UTC 时间。

以下是一些示例,通过设置 TZ 环境变量,可以更改所提供字符串的表观时区(显示的 TZ 值适用于常见的 Unix 时区文件,特定系统上可用的名称可能会有所不同)。

$ TZ="America/New_York" date -d "2012-01-30 21:15:19" +%s
1327976119
$ TZ="Europe/Paris" date -d "2012-01-30 21:15:19" +%s
1327954519
$ date -u -d "2012-01-30 21:15:19" +%s
1327958119

关于javascript - Unix 格式的 GMT/UTC(非本地)时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9071307/

相关文章:

java - 如何从 java 调用 unix 脚本?

java - 如何在 Android 中比较 AM/PM 时间

C++:如何使用时间和本地时间获取实际时间?

javascript - 主要浏览器中是否仍然存在 ECMAScript 3 实现差异?

javascript - 带有鼠标事件的 Div,带有带有鼠标事件的子 div - 单击外部 div,同时触发两个事件

JavaScript 无法处理瑞典语字母

创建我的第一个 Unix 服务器/客户端,但出现 "shmget: Invalid argument"错误甚至更多。 [C]

python - 将 EPOCH 时间戳转换为日期

javascript - 动态更改注入(inject)的 CSS 类......好吗? ...坏的?

sql - sqlserver中日期时间和时间戳之间的区别?