2012-02-06 3 views
1

Я хотел бы получить время в секундах (стандартное время() формат) предыдущего 4 утра.Как мне получить время предыдущего «4 часа ночи»?

Моя первая попытка: mktime(4,0,0).

Это работает каждый раз в день, за исключением между 00:00 и 04:00, потому что это даст время следующего «4 часа ночи».

  • Как я могу решить эту проблему?

ответ

4
$now = new DateTime(); 
$fourAm = new DateTime('today 4am'); 

if ($now < $fourAm) { 
    $time = strtotime('yesterday 4am'); 
} else { 
    $time = $fourAm->getTimestamp(); 
} 

Где $time является Отметка «последнего 4am», независимо от того, в какое время он в настоящее время.

Edit:

Вы также могли бы сделать это без DateTime объектов, но я люблю этот набор классов, так что я обычно нахожу какой-либо причине на все, чтобы их использовать. :-P

$now = time(); 
$fourAm = strtotime('today 4am'); 

if ($now < $fourAm) { 
    $time = strtotime('yesterday 4am'); 
} else { 
    $time = $fourAm; 
} 
0
$date = strtotime('yesterday 4am'); 
+0

Nice. Я думал, вам нужно сделать $ results = strtotime («вчера») + (60 * 60 * 4); но это работает еще более элегантно. – phpmeh

+0

strtotime() - довольно удивительная функция. –

+6

Он хочет только вчера, если время [0:00, 4:00) – weston

2

Если время вы создали в будущем, вычесть один день.

Смежные вопросы