使用JavaScript或PHP自动检测用户当前的本地时间

Pet*_*aig 11 javascript php timezone

我经常需要根据用户的实际本地时间或受时区影响而显示信息.获取用户当前时间和/或时区是否有可靠的方法?

关键问题:

  • 服务器端代码基于网站主机或用户的ISP
  • 客户端代码基于用户的系统时钟,操作太容易操作

关键问题:

  • 是否有必要确定用户的地理位置?
  • ISP时间可以准确指导吗?
  • 用户OS时钟可能会有所不同或被用户修改?

例子:

倒数:

只需1小时3分56秒!

问题:基于什么去的几秒钟; 用户的OS时钟,主机服务器时间(正负偏移),ISP系统时间.如果所有时区的时钟同时结束,这很容易,但如果它是用户本地时区的午夜倒计时,则会更加棘手)

编辑日志

项目发布于3:03 pm(10秒前)

问题:无论用户如何计算"10秒",调整时间以匹配用户的时区.

营业时间:

这家餐厅现在营业至午夜(AEST).

问题:给出午夜等时间可以通过从服务器端偏移来计算,但是使用psudo时间(例如现在),在2小时内取决于用户的时间.

PHP:使用time()输出服务器时间.这可以根据用户的时区进行偏移.

JavaScript:使用Date()输出用户的计算机时钟时间太容易操作.

Jas*_*wig 12

使用JavaScript,有一种方法可以让用户获得当前时区偏移量.

new Date().getTimezoneOffset() * -1
Run Code Online (Sandbox Code Playgroud)

从GMT返回以分钟为单位的偏移量.请勿存储此值,因为它可能会根据夏令时变化.如果你需要它在服务器(PHP)上,那么你需要在发送它时捕获它.

不幸的是,HTTP规范不会将用户时区作为标头发送,这是php需要的.


Dan*_*man 8

总之没有.

我建议使用服务器端时间,并且能够让用户选择他们的时区.

您可以根据IP地址周围的启发式方法计算用户的默认时区,但这是错误的.

您应该能够通过javascript/Ajax提取客户端时区信息,但与时间本身一样,这也是错误的.

我的建议:让用户根据您期望用户的位置选择具有合理默认值的时区.