Answer the question
In order to leave comments, you need to log in
How to get date range?
There is such a task:
Create two random dates (using mt_rand()) and set them to 2 objects of the DateTime class.
Find the number of days, hours, minutes and seconds by which one date differs from another.
Make a division into periods with an interval of 1 day.
In a loop, output all the dates that are between those created in the 1st paragraph, with an interval from the 3rd paragraph.
In general, it turned out like this for me: (the result turned out not quite right wrong)
<?php
$date_1 = new DateTime();
$date_2 = new DateTime();
// Генерация случайных дат через mt_rand. Если не так, то подскажите, пожалуйста, как будет правильнее
$date_1->setDate(mt_rand(2000, 2030), mt_rand(1, 12), mt_rand(1, 30)); //генерируем первую случайную дату
$date_1->setTime(mt_rand(0, 23), mt_rand(0, 59), mt_rand(0, 59));
$date_2->setDate(mt_rand(2000, 2030), mt_rand(1, 12), mt_rand(1, 30)); //генерируем вторую
$date_2->setTime(mt_rand(0, 23), mt_rand(0, 59), mt_rand(0, 59));
//Вывод двух получившихся дат (Не обязательно, но для наглядности добавил)
echo $date_1->format('d/Y/m H.i.s').'<br>'; //Первая
echo $date_2->format('d/Y/m H.i.s'); //Вторая
echo '<br>';
$interval = $date_1->diff($date_2); //Находим разницу между двумя датами
echo $interval->d.'<br>'; // Разница в днях (Подскажите если есть более удобный способ вывода для данной ситуации)
echo $interval->h.'<br>'; // Разница в часах
echo $interval->i.'<br>'; // Разница минутах
echo $interval->s.'<br>'; // Разница в секундах
$interval_2 = new DateInterval('P1D'); //Создаём интервал в 1 день
//И тут, если я правильно понял, нужно вывести даты с интервалом в 1 час от меньшей до большей дат.(Поправьте если неправильно). Но мы ведь не знаем какая дата получится больше $date_1 или $date_2.
$period = new DatePeriod($date_1, $interval_2, $interval->d); //Получилось так, что я к первой дате с интервалом в 1 день я делаю шаги, равные количеству дней из разницы 2-х дат , но это что-то не то.
foreach($period as $dt){ //вывожу каждый шаг через цикл
echo $dt->format('d/m/Y H:i:s').'<br>';
}
?>
Answer the question
In order to leave comments, you need to log in
it is better to generate dates not through setTime. There is a chance to generate on February 30 and get an error. better something like:
$rand = mt_rand(1, 99);
$dateStart = date('Y-m-d H:i:s', strtotime("-$rand days"));
$dateEnd = date('Y-m-d H:i:s', strtotime("+$rand days"));
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question