V
V
Vitya Podpriklopolny2018-09-28 20:58:38
PHP
Vitya Podpriklopolny, 2018-09-28 20:58:38

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>';
  }
  

?>

Can you please tell me if I am correct and what is the best way to solve this problem?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
M
My joy, 2018-09-28
@megamage

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"));

also, if you need seconds, add to strtotime like "-$rand days $rand hours $rand seconds" or define your own $rand for each division (days hours minutes) like $randD, $randMin, $randH and so on.
And then at intervals.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question