准确获取用户当地时间


Get the users local time accurately

我正在做一个主要使用javascript, css, html5的项目。我需要得到准确的当地时间,无论用户位于何处,允许用户访问特定日期的模块。假设 1 September .

如何准确获取用户本地时间?

选项:

1:使用JavaScript获取用户的本地时间并使用它

问题:用户可以手动更改其系统的日期时间设置,以更改日期并过早地访问模块。

2:使用服务器日期时间在特定日期启用模块。

问题:服务器可以位于任何地方,例如:在美国和澳大利亚的人将无法访问该模块,除非美国的日期是9月1日。

还有其他选择吗?

使用客户端IP地址是一个选项吗?

用户的时间/日期信息不包含在HTTP请求头中,所以PHP不会自动获得这些信息。你可以,就像你说的,使用javascript来获取用户的时间,类似于这里发布的:确定用户的时区——这是用纯javascript,如果你使用jquery或类似的东西,你可以很容易地做到这一点。

如果这些是注册用户,你可以允许他们在他们的配置文件/设置中设置时区,然后只使用该设置,所以即使他们正在旅行,他们也将始终被设置为"home"时区。

有帮助吗?

首先,您应该始终假设用户可能会伪造自己计算的任何数据。因此,使用服务器时间更可靠。

使用IP是一个选项-您可以找到允许您将IP解析为其所在国家的服务和数据库。例如:http://php.net/manual/en/book.geoip.php

最后-为什么你想有效地为不同的国家不同的发行日期?

如果用户允许,并且使用支持的浏览器等,您可以使用navigator.geolocation.getCurrentPosition()获取他们的位置。

有关参数和更多信息,请参见developer.mozilla.org/en-US/docs/Web/API/Geolocation.getCurrentPosition。

然后您可以使用geonames.org提供的服务。例如,http://api.geonames.org/timezone?lat=47.01&lng=10.2&username=demo。返回给定坐标处的时间。

根据第一条评论更新:当然,你永远不能相信任何来自外部的数据。但是你可以做一些事情来提高自信。这不是一个完整的独立解决方案。