为什么JavaScript和PHP时间戳存在差异?

7

我创建了一个JavaScript时间戳和一个PHP时间戳。它们之间大约相差170秒。

  • 1302162686 PHP - time()
  • 1302162517 JavaScript - Math.round(new Date().getTime() / 1000)

请问有人可以告诉我为什么会出现这个问题吗?


1
服务器和客户端的时间设置一样吗? - Felix Kling
6个回答

14

PHP在服务器端执行,而JavaScript在客户端执行。

两者都有自己的时间配置。对于服务器端来说,时区设置等将保持不变(除非你更改它们),但服务器无法知道当前访问者所在的时区。你无法控制这一点。

如果我更改我的笔记本电脑上的系统时钟,它会影响客户端JavaScript的日期/时间,但你的服务器计时器不会受到影响。


抱歉,我的错,那时候我完全失去理智。谢谢你的帮助。 - Omer Abbas

2

PHP和JavaScript都会查看系统时间。这是哪个系统的时间?它们正在运行的系统。服务器可能位于另一个国家,具有不同的时间,因此会有差异。

此外,客户端(或较少情况下,服务器)的时钟可能不正确。

我经常用的一种解决这个问题的方法是:

var referenceTime = new Date('<?php echo date("M n, Y"); ?>');
// referenceTime is now the same as server time

1

PHP 查看系统时间,即运行它的服务器时间。

JavaScript 查看客户端系统时间,可能是任何时间。


1

PHP 使用服务器上的时间,而 JavaScript 则使用客户端(用户)机器上的时间。


1

Mathias 是正确的。通常情况下,由于现代计算机识别其时钟会随时间漂移,并采用协议如NTP 来保持它们的时钟同步,因此不应该出现这么大的差异。

尽管如此,你永远不应该假设客户端和服务器的时间是相同的,原因有两个:

  • 一些客户端/服务器没有时钟调整(例如 NTP),它们的时钟会随时间漂移
  • 更重要的是,许多用户/管理员可能不知道或晚了设置他们的时区或调整夏令时,因此给你的时间可能准确到秒,但会相差好几个小时。

在比较/计算时间时,我会只依靠服务器。你无法控制客户端。


很好的答案。最后一段话不能够强调得足够多。 - Mathias Bynens

0
如果您关心一致性,无论出于何种目的,我建议使用服务器作为您的时间源,并在必要时进行时区转换:
这可能会引起您的兴趣:使用PHP处理时区转换

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接