Unix时间在不同时区的不同设备上

时间:2012-10-05 07:01:27

标签: 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,我可以这样做吗?我不是必须为太平洋设备提供一个值,而为中央设备提供不同的值来计算与UTC的时区差异吗?

抱歉,时区对我来说真的很困惑。我无法绕过他们。

2 个答案:

答案 0 :(得分:1)

如果你使用Unix时间,你不必担心(下面有一个例外)。听起来你希望无论时区在同一时刻都能在世界各地弹出警报。

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时间描述的给定时刻发出警报,原则上您的代码应该可以正常工作,只要运行脚本的计算机设置为正确的时间。 / p>

我想如果你真的想让一堆电脑同时发出警报(你在写病毒吗?开个玩笑)你想要处理设备可能设置不正确的时钟,你可以让他们调用中央时间服务器并根据它设置超时。那么您可能不得不处理跨站点问题,但原则上,如果所有计算机都同意与中央时间服务器通信并接受数据,则可以执行此操作。

<强>附录

以下是可行的方法。让我们说你的脚本在一堆机器上运行。他们的时钟都错了。也许他们故意将时钟设置错误;也许他们意外地设置了他们的时钟错误。但是你希望他们都能同时发出警报。

所以你的脚本应该做的是:对服务器进行一次(Ajax)调用 - 与提供嵌入脚本的HTML页面相同的服务器,以简化跨站点问题。此呼叫与您的服务器通信,后者知道实时。现在你也知道从现在到警戒时间的时间。因此,将服务器上的这两个值减去,并将其传回给编号的客户端。然后客户做

setTimeout(theAlertFunction, theValueReturnedFromTheAjaxCall)

你很高兴。

答案 1 :(得分:0)

如果用户的系统设置为错误的日期,则无法为此做任何事情,如果忽略这种情况,您可以在任何系统中获得服务器时间戳的正确时间。

您可以在任何时区从时间偏移UTC并将其添加到您的时间戳Bingo !!!

 var d = new Date(); 
    var yourCorrectDate = new Date(timeNow +(d.getTimezoneOffset() * 60000)); 
// timenow is the time your server has sent

为你提供minuts的偏移量

d.getTimezoneOffset()