2014-03-13 1 views
1

Я пытаюсь сделать простой обратный отсчет, но это дает неправильное время:«strtotime (« завтра ») - время()« ИЛИ »strtotime (« завтра ») - strtotime ('now')" не даст правильное время до предстоящей полуночи

$time_seconds_view = strtotime('tomorrow') - time(); echo date("H" . " \h\o\u\\r\s\, " . "i" . " \m\i\\n\u\\t\\e\s\, \a\\n\d " . "s" . " \s\\e\c\o\\n\d\s", $time_seconds_view); 

плюет из 00 hours, 30 minutes, and 00 seconds

date_default_timezone_set($this->session->userdata('timezone')); даже если установлен в America/Phoenix

следует выплюнуть 07 hours, 30 minutes, and 00 seconds

это как если бы PHP не принимал во внимание, что я изменил часовой пояс по умолчанию.

Все, что я делаю неправильно? Спасибо за вашу помощь!

ответ

0

Использование DateTime. Это намного лучше для математики.

$tomorrow = new DateTime('tomorrow'); 
$now = new DateTime(); 
$diff = $tomorrow->diff($now); 
echo $diff->format("%h hours, %i minutes, %s seconds"); 
// 7 hours, 12 minutes, 53 seconds 

See in action

+0

Вау, спасибо! Работает. Что случилось с моим кодом? Так запутался, почему это не сработает правильно. –

+0

Также, как ваш код [ваша демонстрация в действии] мог получить правильный часовой пояс от меня? –

+0

Не уверен. Но time(), strtotime(), date() и т. Д. Не были рассчитаны на математику с датами, поэтому для вещей легко отключиться по неочевидным причинам. К счастью, DateTime() решает эту проблему для нас. –