我知道有很多类似的问题,但我没有找到我真正需要的东西......
所以我使用PHP,我想在访问者当前时区显示数据库的时间戳。
到目前为止,我已完成以下工作:
在PHP中,我到处使用$ TIME,即:
$TIME = time() - date("Z");
这应该是对时间的绝对参考,没有dst ,我是对的吗?
我用javascript获取用户的时区偏移量(仅在第一次访问时),并将其存储在几分钟内:
var d = new Date();
var tz = -d.getTimezoneOffset();
当然,用户可以将他/她的时区设置为另一个。
从数据库显示日期时,我将存储的时间量添加到时间戳:
$timestamp += $TIMEZONE_OFFSET * 60;
我用date()
这似乎运作良好,但我想知道如果它来到dst。
我想到以某种方式自动更改用户的时区偏移,当涉及到dst时,但是所有日期都将被更改(那些也不在dst期间)。并非每个地区都使用dst,所以我真的很困惑如何解决这个问题:\
答案 0 :(得分:0)
首先,time()
和date()
依赖于INI设置date.timezone
以及DST。绝对时间你应该使用gmmktime()
和gmdate()
代替。
有关时区夏令时的信息可以通过DateTimeZone::getTransitions()
解决。
或者您可以使用某些第三方服务。
答案 1 :(得分:0)
我会以Unix date()格式发送所有时间戳,这是基于UTC的, 独立于时区,DST等。在PHP方面:
$php_timestamp = gettimeofday(true);
在JavaScript方面:
var js_timestamp = new Date(php_timestamp*1000);
然后所有get{FullYear,Month,Date,Hours,...}()
和
to[Locale]{Date,Time,}String()
方法会自动生成结果
基于用户(客户端)时区。