Проверьте, что данная дата в будущем более 20 лет с использованием переполнения стека

Я хочу проверить, будет ли данная дата более 20 лет в будущем, используя PHP

Пока я делаю это:

<?php
$date = '2039-03-23';
if (floor((time() + strtotime($date)) / (60*60*24*365)) > 20)
{
echo "date is in future over 20 years..<br>";
}
else
{
echo "date is in future but less than 20 years.<br>";
}

Но это не работает, кто-нибудь, пожалуйста, скажите мне, что я здесь делаю не так.

Заранее спасибо.

1

Решение

Вы добавляете дату сейчас (time()) чтобы $dateи заканчивайте путь дальше, чем предполагалось, поэтому вместо этого:

floor((strtotime($date)-time()) / (60*60*24*365))

Должен дать вам разницу между 2039-03-23 ​​и сейчас.

Обратите внимание, что даты могут быть хуже сегодняшних, и вам следует подумать о добавлении результата «дата в прошлом».

2

Другие решения

Хотя ответ Номиса правильный, ваш подход выглядит ужасно сложным и безобразным. Я бы использовал DateTime-Объект и работа с тем:

//create the DateTime-Object with origin time
$dateOrigin = new DateTime('2027-03-23');
//create a new one with current time
$dateNow = new DateTime();
//Add 20 years to the current time object
$dateNow->add(new DateInterval("P240M"));

//compare them
if($dateNow < $dateOrigin) {
echo "date is 20 or more years in the future";
} else {
echo "date is not 20 or more years in the future";
}

За работой пример.

2

По вопросам рекламы [email protected]