如何在使用PHP或javascript的用户的同一时区显示日期时间?

时间:2010-05-29 09:13:34

标签: php javascript timezone

假设现在我的日期时间显示如下:

2010-05-29 15:32:35

相应的时区可以通过date_default_timezone_get

获取

如何在与用户浏览器相同的时区输出结果,以免用户感到困惑?

2 个答案:

答案 0 :(得分:2)

没有可靠的方法从PHP或JavaScript读取用户的区域设置时区设置。

在JavaScript中,您可以读取UTC与用户当前时区中的时间之间的偏移量,但这并没有为您提供时区名称,因此您要么关闭时区标识符(使时间完全不明确)或包含它是一个明确的偏移量,如UTC+01:00,这是很丑陋的,并且仍然不会在不同的夏令时期间改变时区。

正如bobah所说,您可以在JavaScript toLocaleString()上使用Date将其输出到客户端的真实桌面时区。但是,通过这种方式,您无法控制日期格式。例如,在我的机器上Chrome会输出笨重的东西:

Sat May 29 2010 15:03:46 GMT+0200 (W. Europe Daylight Time)

而Opera只是咳嗽起来:

29/05/2010 15:03:46

因为它根本没有说明时区,所以是无用的模棱两可。 IE同样简洁,Safari也没有时区。 Firefox在Linux上为我做,但在Windows上没有。哎呀。

因此,如果您需要可靠性,处理时区的唯一方法是让用户在其站点设置中手动选择一个,然后在为他们生成页面时从UTC转换为该时区。您可以在JavaScript中猜测它可能是哪些常见时区(请参阅this question了解策略),但您不能保证您是对的。

答案 1 :(得分:0)

您可以将UTC时间戳传递给页面并使用JavaScript进行转换。我曾经使用过这个技巧并对结果感到满意。有一个constructor的JavaScript日期记录UTC时间戳。对于PHP生成的UTC时间戳,可以使用gmmktime()