如何确定服务器时区的 UTC 偏移量?

Posted

技术标签:

【中文标题】如何确定服务器时区的 UTC 偏移量?【英文标题】:How to determine UTC offset from server timezone? 【发布时间】:2010-12-23 13:46:19 【问题描述】:

我找到了很多关于 UTC 表和 php 日期方法的示例来转换它,但是在获得服务器日期后,我仍然想念一个简单的方法,将它转换为我网页上的用户时区选择。

在这个页面http://vkham.com/UTC.html我找到了一个清晰的指南来理解范围,但是我不知道如何连接例如桌子上的“欧洲/罗马”,所以有什么更清楚的吗?

我知道我的服务器的时区(美国/芝加哥),但我仍然不知道如何将其从 UTC 方法更改为从用户机器中选择的不同时区(例如“欧洲/罗马”)

我尝试了一些东西,但我仍然想念一些东西,我不知道它是什么:

<?php
$timezone = date ("e");
$date = date ('Y-m-d H:i:s');
print $date." - this is my server date, and his timezone is - $timezone<br/>";

$user_timezone = "Europe/Rome"; // there is a way to convert Europe/Rome to UTC -13?
$selected_timezone = "-13"; // is -13 like Europe/Rome in all cases or only because my server is America/Chicago?
$date_user = date ("Y-m-d H:i:s $selected_timezone");
$str_date_user =  strtotime ($date_user);
$new_user_date = date ('Y-m-d H:i:s', $str_date_user);
print $new_user_date . " - this is my server date, and his timezone is - $user_timezone";
?>

不存在将欧洲/罗马转换为 UTC 时区的 -13 的方法吗? -13 在所有情况下都像欧洲/罗马还是仅仅因为我的服务器是美国/芝加哥?

【问题讨论】:

您必须结合使用 PHP(获取服务器时间数据)和 JS(获取用户时间数据) 【参考方案1】:

您可以使用 gmdate 生成显示 UTC 时间的日期 - 无论您的服务器在哪个时区运行。然后您可以简单地将时区差异作为 hours * 3600 添加到用于生成日期的时间戳中获取用户的时间。

另一种方法是使用date_default_timezone_set 将本地时间临时设置为用户的时区。

第一个想法的一个简单示例如下:

<?php
$offset   = -13 * 3600; // timezone offset for UTC-13
$utcTime  = gmdate( 'd.m.Y H:i' );
$userTime = gmdate( 'd.m.Y H:i', time() + $offset );
?>

【讨论】:

以上是关于如何确定服务器时区的 UTC 偏移量?的主要内容,如果未能解决你的问题,请参考以下文章

如何将系统时间转换成utc时间

如何将UTC时间转化为本地时间

时区分钟偏移量的 TimeZoneInfo

给定 UTC 时间戳和 UTC 偏移量,是不是可以在 Python 中获取时区?

获取节点中特定时区的 UTC 偏移量和 DST 信息? [复制]

Python & pytz:确定时区是不是支持 DST 以及 DST 和非 DST UTC 偏移量是多少