Как найти количество дней между двумя датами в PHP

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

Мы будем использовать две встроенные функции, которые предоставляет PHP

  1. strtotime() — strtotime() преобразует дату в временную метку Unix. Типы допустимых форматов дат можно найти в документации PHP по datetime

  2. round() — round() — это математическая функция, которая округляет число с плавающей точкой до ближайшего целого числа, например round(4.5) = 5, round(3.4) = 3 и т.д.

Давайте посмотрим, как можно использовать эти две функции, чтобы получить то, что нам нужно

<?php
    $start_date = "3rd August 2022";
    $end_date = "15th August 2022";

    // ts means timestamp
    $start_ts = strtotime($start_date);
    $end_ts = strtotime($end_date);

    $diff = $end_ts - $start_ts;

    echo round($diff / 86400); // returns 12, that is 12 days
Войти в полноэкранный режим Выйти из полноэкранного режима

Итак, что именно происходит?

  • Мы создаем две переменные для хранения начальной и конечной дат, разницу между которыми мы хотим найти.
  • Метод strtotime() преобразует даты в формат временной метки unix. Нам нужно преобразовать эти две даты, чтобы мы могли получить количество секунд от 1 января 1970 года до этих двух дат. Это очень важный шаг.
  • Мы вычитаем две даты друг из друга, чтобы получить разницу в секундах.
  • Затем разделим эту разницу на 86400. Почему 86400? Потому что это количество секунд в сутках (60 секунд x 60 минут x 24 часа). Разделив разницу на общее количество секунд в сутках, мы получим искомое количество дней.
  • Последний шаг — округлить полученный ответ до целого числа.

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

<?php
    function dateDiff($start, $end) {
        $start_ts = strtotime($start);
        $end_ts = strtotime($end);
        $diff = $end_ts - $start_ts;

        return round($diff / 86400);
    }
Вход в полноэкранный режим Выйти из полноэкранного режима

Это довольно легко и просто создать, и у этого способа есть много вариантов использования, где он будет полезен. Есть ли у вас лучший способ решения этой проблемы, хотелось бы узнать в комментариях.

Оцените статью
devanswers.ru
Добавить комментарий