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

标签 php time cron

我正在写一个PHP系统,我需要获取系统时间。不是 GMT 时间或特定于时区的时间,而是 CRON 系统使用的相同系统时间。我有一个每天午夜运行的 CRON 作业,我想在网页上显示它再次运行需要多长时间。

例如: 现在我的系统时钟是下午 6 点。我运行代码:

$timeLeftUntilMidnight = date("H:i", strtotime("tomorrow") - strtotime("now"));

然而,结果是“3:00”而不是“6:00”。如果我跑

date("H:i", strtotime("tomorrow"));

它返回 0:00,这是正确的。但是如果我跑

date("H:i", strtotime("now"));

它返回 21:00,即使正确的应该是 18:00。

谢谢。

最佳答案

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

PHP time() 函数不像大多数人认为的那样返回系统时间,但它返回 PHP 本地时间,通常在 php 中用 date.timezone 设置.ini,或在脚本中使用 date_default_timezone_set() 进行设置。

例如,在我的一台服务器中,PHP 时间设置为 Europe/Rome,系统时间设置为 UTC。我的系统时间和 PHP 时间相差一小时。

我将为您提供适用于 Linux 的解决方案,但我不知道适用于 Windows。在 Linux 中,系统时区在 /etc/timezone 中设置。现在,这通常超出了我允许的 open_basedir 设置,但您可以将 :/etc/timezone 添加到您的列表中以便能够读取该文件。

然后,在想要获取系统时间的脚本之上,您可以调用将脚本时区设置为系统时区的库函数。我想这个函数是类的一部分,所以我使用静态:

static function setSystemTz() {
    $systemTz = trim(file_get_contents("/etc/timezone"));
    if ($systemTz == 'Etc/UTC') $systemTz = 'UTC';
    date_default_timezone_set($systemTz);
}

更糟糕的是,PHP 5.3.3 无法识别“Etc/UTC”,而“UTC”可以识别,所以我必须添加一个 if 来解决这个问题。

现在您可以愉快地调用time(),它会真正为您提供系统时间。我已经测试过了,因为我自己需要它,所以我现在才发现这个问题。

关于php - 如何在 PHP 中获取本地系统时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2329467/

相关文章:

php - 创建发货 bigcommerce

java - Android 上处理服务器端异常

c - 如何使用从 time.h 函数获取的日期和时间

java - 从转换毫秒显示小时数显示不正确

cron - spring 计划任务每​​秒运行一次,使用 cron(0 0/10 * * * ? )

linux - 如何知道 crontab 中的任务是否实际执行

php - 通过 jQuery 提交表单后 View 未加载

php - 基于 URL ID 加载图像

r - 如何使用 CSV 时间数据在 R 中创建直方图?

ruby-on-rails - "[fail] Can' t 查找文件 : config/schedule. rb"rails, 每当 gem