Круглый день в последний час

Я пытался найти это, но я не мог найти хороший пример этого, что я пытаюсь сделать.

Я получил значения datetime в базе данных MySQL, которые нужно округлить, когда это значение используется.

Пример: все эти значения:

2013-04-20 07:14:42
2013-04-20 07:19:51
2013-04-20 07:37:26
2013-04-20 07:46:28
2013-04-20 07:59:44

Следует округлить до:

2013-04-20 07:00:00

А также

2013-04-20 16:25:34

должно быть:

2013-04-20 16:00:00 и т. Д. …

PHP-код, который получает значение даты:

$d = strtotime($row["date"]); 

Итак, как можно округлить значение datetime?

Попробуй это,

 $date = "2013-04-20 16:25:34"; echo date("Ymd H:00:00",strtotime($date)); 

Демо-версия CodePad.

Если вы используете PHP-версию Carbon DateTime (которая вам действительно нужна – https://github.com/briannesbitt/Carbon )

Вы можете легко достичь этого

Carbon::now()->minute(0)->second(0);

strtotime() дает вам strtotime() метку Unix, которая представляет собой количество секунд с 1970-01-01 00:00:00.

Что, если просто делить на 3600 секунд (секунды эквивалентны 1 часу) и игнорировать остатки (минуты и секунды, которые вы хотите)?

 $d = strtotime($row["date"]); $rounded_d = intval($d / 3600); $formatted_rounded_d = date('Ymd H:i:s', $rounded_d) 

вы можете использовать функцию функции date и strtotime для достижения этого, просто уже измените свои минуты и вторую гармонию

  $date = '2013-04-20 07:14:42'; $newdate = date('Ymd H:00:00', strtotime($date)); echo $newdate; 

это выведет

 2013-04-20 07:00:00 

Это записывает дату в строку, выводя непосредственно 00:00 виде минут и секунд вместо записи i:s :

 $date = date("Ymd H:00:00", $d); 

Или вам это нужно как unix timestamp? Затем сократите минуты и секунды (всегда последние 5 байтов) и замените их на 00:00 .

 $d = strtotime(substr($row["date"], 0, -5)."00:00")); 

В этом случае простой substr мог бы сделать:

 echo substr($date, 0, 13) . ":00:00"; 

Поскольку у вас уже есть отметка времени $d Unix, наиболее эффективным способом является использование только арифметических функций вместо функций даты, особенно если вы собираетесь перебирать результирующий набор.

 $hourTimestamp = $d - ($d % 3600); 

Оператор Modulo дает вам остаток, который вы вычитаете из метки времени, чтобы получить метку времени в часах.

Для тех, кто следует (намного позже!): У углерода есть простой способ сделать это

 $date = (new Carbon($row['date']))->minute(0)->second(0)->getTimestamp();