我读得越多,我就越困惑。
我的项目计划是在 UTC 中处理所有日期/时间存储和计算,但显示该数据时除外。问题是服务器将移动到具有不同时区和夏令时信息的不同位置,因此我必须在 UI 中实现某种形式的时区选择器。
但是有各种例外情况会发生夏令时和没有夏令时,例如亚利桑那州除了纳瓦霍印第安人保留地之外没有夏令时。所以我不能简单地使用时区位置的 PHP 列表(例如'America/Phoenix'),因为我不知道服务器的实际位置是否会在这样一个区域,所以我猜我会必须实现一个“使用夏令时”复选框和一个带有简单时区信息的更基本的选择框,例如“CST -6”等。
我可以使用“美国/凤凰城”系统来显示城市列表,但这会导致列表非常长。但是如果我在我的列表中使用 EST/CST,那么对于有与没有 DST 的区域来说,它是不准确的,所以我认为如果没有“DST?”我就无法做到这一点。复选框。
但是,我刚刚尝试了 PHPDateTime
和DateTimeZone
'CST'、'CDT' 和 'CST6CDT',所有三个结果都在同一时间,无论是二月的日期还是六月的日期。我想,CDT应该有DST,CST应该没有DST,CST6CDT应该使用自动切换,但显然没那么简单……
所以......如果我正在使用 EST/CST/PST 等时区列表并希望能够通过复选框关闭 DST,我将如何在 PHP 代码中实现它?如何在支持打开或关闭 DST 的情况下告诉 PHP 将时间转换为正确的时区?
我知道基本代码,但不知道如何更改 DST:
$myTime = new DateTime('02/10/2013 08:00:00', new DateTimeZone('UTC'));
var_dump($myTime); // UTC
$localTz = new DateTimeZone('America/Phoenix'); // selected by user
$myTime->setTimezone($localTz);
var_dump($myTime); // Phoenix with local DST settings
在不同但相关的说明中,更改 Linux 服务器的位置是否会导致服务器的内部时钟更改时区?移动服务器会扰乱内部时钟并导致不正确的 UTC 时间戳吗?