gpt4 book ai didi

javascript - 从客户端提供的时间戳(和时区)获取正确的时间

转载 作者:行者123 更新时间:2023-12-03 12:06:15 24 4
gpt4 key购买 nike

我有一个典型的 php/html/javascript 应用程序。有一个主要的 HTML 页面,其中包含大量 JavaScript 和 AJAX 调用 PHP 来接收/发送数据。

除此之外,该应用程序还会跟踪某些用户操作,记录操作内容以及操作的时间戳。我在 javascript 中获取时间戳为 new Date().getTime()。我将操作日志发送到服务器,服务器使用 $dt = date('h:i:s', timestamp/1000) 来获取人类可消化的时间。 (请注意,出于打印目的,我只对时间元素感兴趣,但我需要将完整的日期/时间存储在数据库中以供以后审核。)

我的客户可以位于世界任何地方。我注意到,当我对从客户端收到的时间戳调用 date 时,服务器会应用服务器所在位置的时区偏移量(很可能是来自 php.ini 的默认时区) )。因此,如果伦敦的客户端传递 10:00:00 的时间戳,则服务器打印的时间最终为 2:00:00,因为服务器位于加利福尼亚。

我可以轻松发送时区 UTC 偏移量和数据(即 new Date().getTimezoneOffset() 的值)。但是我不太明白应该如何使用这个时区偏移来为客户端获得正确的打印输出。这可能是获取默认 tz 和使用客户端的 tz 的某种组合 - 但我就是无法理解它。

我想要的只是 10:00:00 的时间戳显示为 10:00:00,无论客户端或服务器在哪里。

最佳答案

只需设置您正在工作的时区的时间,然后将其更改为用户的时区:

$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;

关于javascript - 从客户端提供的时间戳(和时区)获取正确的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25182756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com