Я пытался найти это, но я не мог найти хороший пример этого, что я пытаюсь сделать.
Я получил значения 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();