Справочники, инструменты, документация

PHP: Как вычитать и сравнивать даты

Предположим, что на вашем сайте стоит ограничение на возраст посетителя. Человек вводит дату рождения, и вам необходимо проверить, сколько же человеку лет относительно текущего дня, и в последующем выполнить какое-то действие.

В PHP существует функция strtotime, которая преобразовывает указанную дату в метку времени Unix (дата в секундах). Именно она и поможет нам решить обе поставленные задачи.

Вычитание дат в PHP

$you_date = "23.03.1990"; // Ваша дата
$now_date = date("d.m.Y"); // Текущая дата
$you_date_unix = strtotime($you_date);
$now_date_unix = strtotime($now_date);
$result = ($now_date_unix-$you_date_unix) / (60*60*24*365); // Рассчитываем года
$years = floor($result); // Округляем результат до целого числа
if($years < 18) {
    die("Извините, но доступ к этому разделу ограничен, так как вам нет 18 лет");
}

В этом примере мы получаем количество лет в разнице этих дат. Важным нюансом здесь является то, что обе даты должны быть в одном формате.

Сравнение дат в PHP

Здесь мы с помощью той же функции strtotime переведем обе даты в Unix, после чего сравним их как обычные числа.

$you_date = "23.03.1990"; // Ваша дата
$now_date = date('d.m.Y'); // Текущая дата
$you_date_unix = strtotime($you_date);
$now_date_unix = strtotime($now_date);
if($now_date_unix > $you_date_unix) {
    echo "Сегодняшняя дата больше указанной";
} else {
    echo "Указанная дата больше сегодняшней";
}

Здесь также важно отметить то, что обе даты должны быть в одном формате.

Как прибавить или вычесть другую временную единицу

Как прибавить или вычесть минуту, час, день, неделю или другую временную единицу к дате на PHP

На вашем сайте регистрируется человек, и вам необходимо предоставить ему премиум-аккаунт, например, на 1 день. Вы знаете точную дату его регистрации, а это значит, что вам не составит труда сосчитать, до какого времени будет действовать его премиум-аккаунт. В качестве инструмента для достижения цели мы будем использовать уже знакомую нам функцию strtotime.

header("Content-Type: text/html; charset=utf-8");

$reg_date = "26.09.2017 20:24:00"; // Дата регистрации
$premium_date = date("d.m.Y H:i:s", strtotime("+1 days", strtotime($reg_date)));

echo "Дата окончания премиум аккаунта: ".$premium_date;

Где +1 days – соответственно, +1 день (если нужно вычесть значение – ставите знак «минус»).

Помимо этого, «days» может быть заменен следующими значениями:

  • second – секунда;
  • minute – минута;
  • hour – час;
  • week – неделя;
  • month – месяц;
  • year – год.