如何在PHP中获取本地系统时间?

Joh*_*rms 7 php cron time

我正在编写一个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.

谢谢.

kni*_*ttl 5

php time将返回系统时间.你可以格式化它date

如果你只是想在访问者的当地时间显示时间,也许你最好使用一点点javascript

  • 我尝试了这个,date("H:i", time()) 返回的是 GMT 时间,而不是本地系统时间。 (2认同)
  • 但问题是,如何获得系统时间,机器之一,你的答案并没有解决这个问题. (2认同)

sti*_*vlo 5

有很多答案,但在撰写本文时甚至没有一个正确.

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(),它真的会给你系统时间.我测试了它,因为我自己需要它,这就是我现在发现这个问题的原因.


Pek*_*ica 0

time()

会给你当前的系统时间戳。

手动的

返回自 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)以来以秒数测量的当前时间。