Driver86
@Driver86
Немодератор toster.ru

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

Как получить случайную дату между двумя датами?
Вариант вида rand($timestamp1, $timestamp2) не подходит, т.к. даты могут быть меньше 1970 года.
  • Вопрос задан
  • 171 просмотр
Решения вопроса 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 года юзайте юлианский день.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽