以当地时间

时间:2015-12-12 00:37:03

标签: php wordpress datetime local

我几乎尝试了所有事情......但是wp_next_scheduled('hook_task')总是返回1小时后的时间(我的当地时区是UTC + 1,任务调度程序设置为每分钟运行一次)。

我尝试了这种转换:

echo gmdate('Y-m-d H:i:s',wp_next_scheduled('hook_task'));
echo date('Y-m-d H:i:s',current_time(wp_next_scheduled('hook_task')));
echo date('Y-m-d H:i:s',current_time(wp_next_scheduled('hook_task'), 1));

但一切都回归 19:05
当下一个函数返回正确的本地时间 20:05

echo date('Y-m-d H:i:s',current_time("timestamp"));

date_default_timezone_get()返回 UTC 如何获得正确的本地日期时间20:05以进行下一次计划运行?

测试

我根据您的回答尝试过:

1)首次测试

echo 'ACTUAL:  ' . date('Y-m-d H:i:s',current_time("timestamp")) . '<br>';
$date = new DateTime("now", new DateTimeZone('Europe/Bratislava'));
echo 'WITH TZ: ' . $date->format('Y-m-d H:i:s') . '<br>';
$time = wp_next_scheduled('hook_task');
$date = new DateTime("@$time", new DateTimeZone('Europe/Bratislava'));
echo 'RESULT:  ' . $date->format('Y-m-d H:i:s');

我也尝试了这个:$date = new DateTime("@$time", new DateTimeZone('Asia/Bangkok'));但是无论我设置为时区,它总是会返回相同的结果。

结果:

ACTUAL:  2015-12-12 22:45:10  // correct
WITH TZ: 2015-12-12 22:45:10  // correct
RESULT:  2015-12-12 21:45:39  // incorrect

2)正确的解决方案

$time = wp_next_scheduled('hook_task');
echo 'RESULT2: ' . get_date_from_gmt( date('Y-m-d H:i:s', $time) );

结果:

RESULT2: 2015-12-12 22:45:39  // correct

1 个答案:

答案 0 :(得分:1)

Wordpress使用GMT时间戳在每次执行任务时重新安排任务,因此为了转换本地时间戳,您需要从GMT时间为当地时间添加偏移量。

幸运的是,有一个名为get_date_from_gmt的函数

  

只需添加gmt_offset选项

的值即可

以下是代码:

$time = wp_next_scheduled('hook_task');

echo get_date_from_gmt( date('Y-m-d H:i:s', $time) );