За последние 24 часа нас посетили 37259 программистов и 7910 роботов. Сейчас ищут 1782 программиста ...

Как посчитать разницу между датами в минутах

Тема в разделе "PHP для новичков", создана пользователем sound, 3 окт 2023.

  1. sound

    sound Активный пользователь

    С нами с:
    6 янв 2017
    Сообщения:
    26
    Симпатии:
    1
    Есть даты в в таком формате
    2023-09-10 01:30:06
    2022-07-10 02:31:07

    как посчитать сколько полных минут прошло между ними ?
     
  2. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    PHP:
    1. <?php
    2. $start = new DateTime("2022-07-10 02:31:07", new DateTimeZone('UTC'));
    3. $end = new DateTime("2023-09-10 01:30:06", new DateTimeZone('UTC'));
    4.  
    5. $interval = $start->diff($end);
    6. $minutes = ($interval->days * 24 * 60) + ($interval->h * 60) + $interval->i;
    7. print_r($minutes);
    8. $minutes = floor(($end->getTimestamp() - $start->getTimestamp()) / 60);
    9. print_r($minutes);
     
    sound нравится это.
  3. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    PHP:
    1. $date1 = '2023-09-10 01:30:06';
    2. $date2 = '2022-07-10 02:31:07';
    3. $diff = (int) ((strtotime($date1) - strtotime($date2))/60)
     
    sound нравится это.
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    485
    Симпатии:
    97
    Адрес:
    Бавария, Германия
    Добрый день!
    Вспомнилось из фильма "17 мгновений весны".Там была песня "Не думай о секундах свысока".
    Конечно можно игнорироать секунды при подсчёта интервала времени в минутах,
    но можно их учесть, и так изменить три предлагаемых выше решения:
    PHP:
    1. <?php
    2. $start = new DateTime("2022-07-10 02:31:07", new DateTimeZone('UTC'));
    3. $end = new DateTime("2023-09-10 01:30:06", new DateTimeZone('UTC'));
    4. $interval = $start->diff($end);
    5. $minutes = ($interval->days * 24 * 60) + ($interval->h * 60) + $interval->i + ($interval->s)/60;
    6. echo "$minutes<br>"; // 614818.98333333
    7.  
    8. $minutes = (($end->getTimestamp() - $start->getTimestamp()) / 60);
    9. echo "$minutes<br>"; // 614818.98333333
    10.  
    11. $date1 = '2023-09-10 01:30:06';
    12. $date2 = '2022-07-10 02:31:07';
    13. $diff =  ((strtotime($date1) - strtotime($date2))/60);
    14. echo "$diff<br>"; // 614818.98333333
    15.  
    16. $diff = round((strtotime($date1) - strtotime($date2))/60);
    17. echo $diff; // 614819
    18. ?>
    Очевидно, что результат типа float во всех случаях совдает, но если "не думать о секундах свысока" то, для его округления м.б правильнее использовать функцию round.

    Удачи!
     
    #4 Vladimir Kheifets, 6 окт 2023
    Последнее редактирование: 6 окт 2023
    sound нравится это.