Ответ 1
Попробуй это,
$date = "2013-04-20 16:25:34";
echo date("Y-m-d H:00:00",strtotime($date));
Я пытался найти это, но я не мог найти хороший пример этого, что я пытаюсь сделать.
Я получил значения 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("Y-m-d H:00:00",strtotime($date));
Если вы используете библиотеку PHP Carbon DateTime (которая вам действительно нужна - https://github.com/briannesbitt/Carbon)
Вы можете легко достичь этого
Carbon::now()->minute(0)->second(0);
Поскольку у вас уже есть отметка времени $d
Unix, наиболее эффективным способом является использование только арифметических функций вместо функций даты, особенно если вы собираетесь перебирать результирующий набор.
$hourTimestamp = $d - ($d % 3600);
Оператор Modulo дает вам остаток, который вы вычитаете из метки времени, чтобы получить метку времени в часах.
strtotime()
дает вам strtotime()
метку Unix, которая представляет собой количество секунд с 1970-01-01 00:00:00.
Что, если просто делить на 3600 секунд (секунды эквивалентны 1 часу) и игнорировать остатки (минуты и секунды, которые вы хотите)?
$d = strtotime($row["date"]);
$rounded_d = intval($d / 3600);
$formatted_rounded_d = date('Y-m-d H:i:s', $rounded_d)
вы можете использовать функцию функции date
и strtotime
для достижения этого, просто уже измените свои минуты и вторую гармонию
$date = '2013-04-20 07:14:42';
$newdate = date('Y-m-d H:00:00', strtotime($date));
echo $newdate;
это выведет
2013-04-20 07:00:00
Это записывает дату в строку, выводя непосредственно 00:00
виде минут и секунд вместо записи i:s
:
$date = date("Y-m-d 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";
Для тех, кто следует (намного позже!): У углерода есть простой способ сделать это
$date = (new Carbon($row['date']))->minute(0)->second(0)->getTimestamp();
Я бы использовал метод DateTime setTime()
в такой функции.
<?php
/**
* @param \DateTime $dateTime
*
* @return \DateTime
*/
function roundDownToHour(\DateTime $dateTime)
{
$dt = $dateTime; // clone
return $dt->setTime(
$dateTime->format("H"),
0,
0
);
}
$testDate = date("Y-m-d H:i:s", mktime(9, 59, 59, 1, 30, 2019));
$roundedDownToHour = roundDownToHour(new \DateTime($testDate));
var_dump($testDate); //=> 2019-01-30 9:59:59
var_dump($roundedDownToHour->format("Y-m-d H:i:s")); //=> 2019-01-30 09:00:00
Что приводит к следующему.
// the results
string(19) "2019-01-30 09:59:59"
string(19) "2019-01-30 09:00:00"