假设现在我的日期时间显示如下:
2010-05-29 15:32:35
相应的时区可以通过date_default_timezone_get
,
如何在与用户浏览器相同的时区输出结果,以免用户感到困惑?
答案 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()。