javascript - 不同时区不同设备上的 Unix 时间

标签 javascript timezone unix-timestamp

假设我有一个执行此操作的 PHP 脚本:

$timeNow = 1349852400000; // Unix time for Oct 10, 2012 00:00:00 PDT
echo "<script type='text/javascript'>";
echo     "setTimeout(function(){alert('time out!');}, $timeNow - Date.now());";
echo "</script>";

如果将此脚本提供给日期/时间设置为 2013 的设备,会发生什么情况?如果将此服务提供给日期/时间设置为 2010 的设备会怎样?

服务器时钟设置的时间和日期重要吗?这对 2013 年的设备有何影响?那个卡在 2010 年的呢?

如果我想为 $timeNow 选择一个值,该值将在 2012 年 10 月 10 日 00:00:00 为加利福尼亚州旧金山同步的任何地方发出警报(即设置为太平洋时间的设备和设置为中部时间的设备应该同时显示警报,即使中部时间设备是凌晨 2:00:00),我可以这样做吗?难道我不必为 Pacific 设备提供一个值而为 Central 设备提供一个不同的值来考虑与 UTC 的时区差异吗?

抱歉,时区让我很困惑。我无法理解它们。

最佳答案

如果为此使用 Unix 时间,则无需担心(下面有一个异常(exception))。听起来您希望无论时区如何,警报都在同一时刻在世界各地弹出。

Unix 时间 0 是

  • 1970 年 1 月 1 日,祖鲁时间午夜
  • 旧金山时间 1969 年 12 月 31 日下午 4:00

因此,如果您安排在时间 0 发出警报,旧金山和伦敦的人们会同时看到该警报。任何 Unix 时间都一样,它实际上只是一个描述瞬间的数字。世界各地的同一瞬间。所以以下两个日期时间字符串

  • 1970-01-01T00:00:00Z
  • 1969-12-31T16:00:00-0800

是同一时刻的表示,用 Unix 时间 0 表示。

同样,世界上的每个人都在完全相同的时刻看到时间 1349852400000,无论他们所在的时区如何。因此,由于您的代码试图在 Unix 时间描述的给定时刻发出警报,原则上您的代码应该可以工作,前提是运行脚本的计算机设置为正确的时间

我想如果你真的想让一堆计算机同时发出警报(你在写病毒吗?开玩笑)并且你想处理设备时钟设置不正确的情况,你可以让他们调用中央时间服务器并根据它设置超时。然后你可能不得不处理跨站点问题,但原则上,如果所有机器都同意与中央时间服务器通信并接受来自中央时间服务器的数据,你就可以这样做。

附录

这是它的工作原理。假设您的脚本在一堆机器上运行。他们的时钟都调错了。也许他们故意把时钟调错了;也许他们不小心把时钟调错了。但是您希望它们都同时发出警报。

那么您的脚本应该做的是:对您的服务器进行 (Ajax) 调用——交付嵌入脚本的 HTML 页面的同一台服务器,以简化跨站点问题。此调用与您的服务器对话,它知道实时信息。现在您还知道从现在到警报时间的时间。因此,在您的服务器上 减去这两个值,然后将该数字返回给客户端。然后客户做

setTimeout(theAlertFunction, theValueReturnedFromTheAjaxCall)

一切顺利。

关于javascript - 不同时区不同设备上的 Unix 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12741171/

相关文章:

javascript - unix 时间戳的 moment.js 格式?

cmake - 如何在 CMake 中将 UNIX 时间戳转换为 ISO

c++ - 将 RFC 822 时间戳转换为 unixtime,时区值不起作用,C/C++

javascript - 如何用JavaScript正确创建HTML5音视频

javascript - 使用 jquery 或 javascript 将逗号分隔的键和值字符串转换为对象

javascript - 停止 Javascript DateTime 调整为本地时区

mysql - 停止在 tz 更改时自动更改 MySQL 中的日期

c# - 为什么 DateTime 到 Unix 时间使用 double 而不是整数?

javascript - Jquery Gritter 设置位置

javascript - 无法在函数中读取关联数组/对象