Я стараюсь почти все .. но 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()
вернуть универсальное глобальное время.
Как получить правильное местное время 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
WordPress использует метку времени по Гринвичу для перепланирования задачи каждый раз, когда она выполняется, поэтому, чтобы конвертировать метку времени в местную, вам нужно добавить смещение по местному времени от времени по Гринвичу.
К счастью, есть функция под названием 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) );
Других решений пока нет …