我有一个典型的php / html / javascript应用程序。有一个主要的HTML页面,其中包含许多用于接收/发送数据的JavaScript和AJAX调用。
除此之外,应用程序还会跟踪某些用户操作,记录操作的内容以及操作的时间戳。我在javascript中获取时间戳new Date().getTime()
。我将操作日志发送到服务器,服务器使用$dt = date('h:i:s', timestamp / 1000)
来获取人类可消化的时间。 (请注意,出于打印目的,我只对时间元素感兴趣,但我需要将完整的日期/时间存储在数据库中以供以后审核。)
我的客户可以位于世界任何地方。我注意到当我在从客户端收到的时间戳上调用date
时,服务器会应用服务器所在位置的时区偏移量(很可能是php.ini
的默认时区)。因此,如果伦敦的客户端传递的时间戳为10:00:00,则服务器打印的时间最终为2:00:00,因为服务器位于加利福尼亚州。
我可以轻松地使用数据(即new Date().getTimezoneOffset()
的值)发送时区UTC偏移量。但是我不太明白我应该如何使用这个时区偏移来为客户端获得正确的打印输出。这可能是获得defualt tz和使用客户端tz的某种组合 - 但我无法理解它。
我想要的是10:00:00的时间戳显示为10:00:00,无论客户端在哪里或是服务器。
答案 0 :(得分:1)
只需在您正在使用的时区中设置时间,然后将其更改为用户的时区:
$date = new DateTime(null, new DateTimeZone('america/los_angeles'));
$date->setTimeZone(new DateTimeZone('user/timezone')); // user timezone. this one is clearly fake.
echo $date->format('H:i:s');
您可以按照this question/answer:
从偏移中获取用户的时区$offset = -10;
$tz = timezone_name_from_abbr(null, $offset * 3600, true);
if($tz === false) $tz = timezone_name_from_abbr(null, $offset * 3600, false);
echo $tz;