Как узнать оставшееся время между двумя датами с помощью PHP

Здесь я делаю оставшееся время в городе, например, предположим, что событие запускает 2018-04-18 04:30 PM. Предположим, что текущее время - 2018-04-18 04:10 PM, означает, что я хочу отображать как осталось 20 минут, я с кодом, но он показывает неправильный результат

Мой код PHP:

    <?php
date_default_timezone_set('UTC');
date_default_timezone_set('Asia/Kolkata');

    function timeAgo($logintime)
        {
        $start_date = new DateTime($logintime);
        $since_start = $start_date->diff(new DateTime(date("Y-m-d h:i:s")));//2018-04-18 04:10 PM

        if ( intval($since_start->format('%Y') ) >= 1){
             $timeago = $since_start->format('%Y years');
        }
        else if (intval($since_start->format('%m')) >= 1){
             $timeago = $since_start->format('%m months ');
        }
        else if (intval($since_start->format('%a')) >= 1){
             $timeago = $since_start->format('%a days ');
        }
        else if (intval($since_start->format('%h')) >= 1){
             $timeago = $since_start->format('%h hours ');    
        }
        else if (intval($since_start->format('%i')) >= 1){
             $timeago = $since_start->format('%i minutes ');  
        }
        else if (intval($since_start->format('%s')) >= 1){
             $timeago = $since_start->format('%s seconds '); 
        }
          return $timeago;  
        }

    echo timeAgo('2018-04-18 04:30 PM');
?>

Я получаю такой результат

12 часов

Мой ожидаемый результат

Осталось 20 минут

Возможный дубликат Как рассчитать разницу между двумя датами с помощью PHP?

Philipp Maurer 18.04.2018 13:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
169
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто укажите только сейчас DateTime. Вы не хотите объявлять формат времени. И вы просто используете этот часовой пояс только date_default_timezone_set('Asia/Kolkata');. Вот код:

date_default_timezone_set('Asia/Kolkata');
   function timeAgo($logintime)
        {
        $start_date = new DateTime($logintime);
        $since_start = new DateTime();
        $interval = $since_start->diff($start_date);

        $timeago = $interval->format("%a days, %h hours, %i minutes, %s seconds");
        if ($since_start < $start_date){
            return $timeago. ' ago'; 
        }else{
            return 'This Event Passed'; 
        }

        }

    echo timeAgo('2018-04-19 05:50 PM');

Выход:

1 days, 0 hours, 56 minutes, 28 seconds ago

Почему вы держите эту часть в ответе? date_default_timezone_set('UTC'); date_default_timezone_set('Asia/Kolkata');, вы должны знать, что второй перезапишет первый?

Andreas 18.04.2018 13:11

@ Андреас, я хочу отобразить день и час, в нашем случае ответ должен быть таким 0 days and 11 minutes , как это сделать

Sagu K 18.04.2018 13:18

Ответ отредактирован @SaguK Пожалуйста, проверьте сейчас

Nawin 18.04.2018 13:24

Другие вопросы по теме