0

我有下一个问题。我有几个 PHP 系统在不同的 Windows 机器上运行。这些系统集中使用当前时间。

现在,我配置了 php.ini 并将其分配给特定的时区。Windows 也配置为相同的时区,一切都按预期工作。

但是,在我国,国家决定更改夏令时。因此,有时,管理员会更改 Windows 时区而保持 php 时区不变,从而在系统中造成不一致。其他时候,是自动更改时区的窗口。

是否有任何方法可以从 PHP 获取忽略时区的当前系统时间?

更新

function time_zone_fix($timeGiven = "H:i:s")
{
    $shell = new COM("WScript.Shell") or die("Requires Windows Scripting Host");
    $time_bias = -($shell->RegRead("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation\\ActiveTimeBias")) / 60;
    $timestamp_bias = 60 * 60 * $time_bias;
    return gmdate($timeGiven, strtotime($timestamp_bias . " seconds"));
}

无论指定什么时区/dsl,都给出当前日期和时间。然而,创建一个新的 COM 接口绝非高效。

4

3 回答 3

2
gmdate('Y-m-d H:i:s');

格式更改为您需要的任何内容。它返回“无时区日期和时间”。gm代表格林威治平均值,如GMT 格林威治标准时间)。GMT 已被UTC(世界标准时间,协调)取代,因此该函数真的应该被调用utcdate()......

但是最便携的时间表示是Unix 时间戳,即自 1970-01-01 00:00:00 UTC 以来经过的秒数,忽略闰秒:

time();

的值time()也是 的第二个参数的默认值gmdate()

BTW,闰秒定于2012-06-30 23:59:60

注意:如果您要求获取某个时区的时间但没有夏令时校正,您可以这样做:

gmdate('Y-m-d H:i:s', time() + 3600 * $h);

哪里$h是与 UTC 的小时偏移量(在美国为负数),或者,如果偏移量不是完整的小时数:

gmdate('Y-m-d H:i:s', time() + 60 * $m);

其中$m是与 UTC 的分钟偏移量(例如,IST 为 330,印度标准时间)。但是,带有附加时区偏移量的 Unix 时间戳本身没有任何意义!

最后但同样重要的是,不要忘记通过网络时间协议NTP同步您的系统。

于 2012-06-22T12:54:30.020 回答
1

PHP 手册支持的时区列表

...在这里,您将找到 PHP 支持的时区的完整列表,这些时区旨在与例如date_default_timezone_set(). ...

然后是这个:(UTC来自这个子页面

于 2012-06-22T12:45:36.730 回答
1

Windows中的PHP,如何获取忽略时区的当前系统时间?我有下一个问题。我有几个 PHP 系统在不同的 Windows 机器上运行。这些系统集中使用当前时间。

于 2013-09-19T06:07:45.833 回答