我正在编写一个PHP系统,我需要获得系统时间.不是GMT时间或特定于时区的时间,而是CRON系统使用的相同系统时间.我有一个CRON工作,每天午夜运行,我想在网页上显示它再次运行需要多长时间.
例如:现在是我的系统时钟下午6点.我运行代码:
$timeLeftUntilMidnight = date("H:i", strtotime("tomorrow") - strtotime("now"));
Run Code Online (Sandbox Code Playgroud)
但结果是"3:00"而不是"6:00".如果我跑
date("H:i", strtotime("tomorrow"));
Run Code Online (Sandbox Code Playgroud)
它返回0:00,这是正确的.但是,如果我跑
date("H:i", strtotime("now"));
Run Code Online (Sandbox Code Playgroud)
它返回21:00,即使正确应该是18:00.
谢谢.
有很多答案,但在撰写本文时甚至没有一个正确.
PHP time()函数不会像大多数人所认为的那样返回系统时间,而是返回PHP本地时间,通常date.timezone在php.ini中设置,或者date_default_timezone_set()在脚本中设置.
例如,在我的一台服务器中,PHP时间设置为Europe/Rome,系统时间设置为UTC.我在系统时间和PHP时间之间有一个小时的差异.
我将为您提供适用于Linux的解决方案,我不知道Windows.在Linux中,系统时区设置为/etc/timezone.现在,这通常在我允许的open_basedir设置之外,但您可以添加:/etc/timezone到列表中以便能够读取文件.
然后,在希望获得系统时间的脚本之上,您可以调用库函数,将脚本时区设置为系统时区.我想这个函数是一个类的一部分,所以我使用static:
static function setSystemTz() {
$systemTz = trim(file_get_contents("/etc/timezone"));
if ($systemTz == 'Etc/UTC') $systemTz = 'UTC';
date_default_timezone_set($systemTz);
}
Run Code Online (Sandbox Code Playgroud)
为了在PHP 5.3.3中使问题变得更糟,"Etc/UTC"无法识别,而"UTC"则是,因此我必须添加if来修复它.
现在你可以愉快地打电话time(),它真的会给你系统时间.我测试了它,因为我自己需要它,这就是我现在发现这个问题的原因.
| 归档时间: |
|
| 查看次数: |
45993 次 |
| 最近记录: |