Задать вопрос
Driver86
@Driver86
Немодератор toster.ru

Как получить случайную дату между двумя датами?

Как получить случайную дату между двумя датами?
Вариант вида rand($timestamp1, $timestamp2) не подходит, т.к. даты могут быть меньше 1970 года.
  • Вопрос задан
  • 241 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ничто не мешает таймстампу быть отрицательным.
$t1 = (new DateTimeImmutable('1900-01-01T00:00:00'))->getTimestamp();
$t2 = (new DateTimeImmutable('1950-01-01T00:00:00'))->getTimestamp();
$t = rand($t1, $t2);
print (new DateTimeImmutable())->setTimestamp($t)->format(DateTimeInterface::RFC3339);
// 1915-10-14T19:08:14+00:00
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега PHP
♬♬
Посчитать число дней между датами,
Получить случайное целое от 0 до этого числа дней.
Добавить к меньшей дате полученные случайные дни.
$start = new DateTimeImmutable('1878-10-11');
$finish = new DateTimeImmutable('2009-10-13');
$interval = $start->diff($finish);
$daysDiff = $interval->format('%a');
$randomDays = rand(0, $daysDiff);
$randomDate = $start->add(new DateInterval("P${randomDays}D"));

echo $randomDate->format('Y-m-d'); // 1896-06-24
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Вычислить разницу между датами в днях/часах/минутах/секундах (смотря какая точность нужна) =INTERVAL
Сгенерировать случайное число в диапазоне от 0 до INTERVAL =RAND
Прибавить к начальной дате RAND дней/часов/минут/секунд
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@krypt3r
Для дат меньше 1970 года юзайте юлианский день.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы