За последние 24 часа нас посетили 35494 программиста и 1818 роботов. Сейчас ищет 831 программист ...

Как получить разницу в минутах

Тема в разделе "PHP для новичков", создана пользователем Eser, 4 май 2011.

  1. Eser

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

    С нами с:
    16 янв 2007
    Сообщения:
    141
    Симпатии:
    0
    Прошу помощи.
    Мне нужно посчитать разницу между часами,т.е 15:20:45-17:10:15=разница в минутах.
     
  2. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    переведи в секунды.
    посчитай разницу.
    раздели на 60.
    profit.
     
  3. Eser

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

    С нами с:
    16 янв 2007
    Сообщения:
    141
    Симпатии:
    0
    Что бы перевести в секунды какую функцию использовать?
     
  4. Alex_pac

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

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    PHP:
    1. <?php
    2.  
    3. /*
    4. Синтаксис : функции mktime
    5. int mktime([int hour] [,int minute] [,int second] [,int month] [,int day] [,int year] [, int is_dst]);
    6.  
    7. Возвращает временную метку Unix согласно данным аргументам. Эта временная метка является целым числом, равным количеству секунд между эпохой Unix (1 Января 1970) и указанным временем.
    8.  
    9. Все парамеры это функции необязательны, но пропускать их можно только справо налево. Если какие-то параметры не заданы, на их место подставляются значения, соответствующие текущей дате.
    10. Аргумент is_dst, указывает, осуществлен ли переход на летнее время (1) или нет (0); если не известно, то аргумент - (-1)
    11.  
    12. Функция возвращает timestamp, соответствующий указанной дате.
    13.  
    14. Правильность даты, переданной в параметрах, не проверяется. В случае некорректной даты ничего особенного не происходит - функция "делает вид", что ее не касается, и формирует соответствующий timestamp.
    15. */
    16.  
    17. //преобразование времени
    18.  
    19. $time1 = '15:20:45';
    20. $time2 = '17:20:45';
    21.  
    22.     $r_time1 = mktime('.str_replace(':',',',$time1).');
    23.     $r_time2 = mktime('.str_replace(':',',',$time2).');
    24. ');
    25.  
    26. $result_time = floor(($r_time1 - $r_time2)/60);
    27. if ($result_time<0) { $result_time+=60*24; }
    28.  
    29. print $result_time;
     
  5. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    В Гугле забанили?
     
  6. Eser

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

    С нами с:
    16 янв 2007
    Сообщения:
    141
    Симпатии:
    0
    Огромное спасибо!
     
  7. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Эпический п**ц
     
  8. Alex_pac

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

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    думаю тут надо догадаться что str_replace(':',',',$time1) внутри eval введен только по причине того что исходные данные в виде строки

    однако в реальности они получаются через нормальные переменные и должны вставляться как аргументы функции
    mktime напрямую
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Alex_pac
    Оригинал!
    На самом деле все решается функцией strtotime
    PHP:
    1.  
    2. <?
    3. echo floor((strtotime('17:10:15') - strtotime('15:20:45')) / 60);
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    вот тут не логично - нельзя от 15 часов отнять 17, потому что время без указания числа - в пределах суток. А если делать например так да
    то с чего берем, что именно 24? Может, эти 15:20:45 были двое суток назад? =)
    Пишите число, либо считайте только в пределах одних суток, чтобы не возникали несостыковки.
     
  11. Eser

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

    С нами с:
    16 янв 2007
    Сообщения:
    141
    Симпатии:
    0
    Вот еще подсказали.

    PHP:
    1. <?php
    2.   $begin = "13:01:45";
    3.   $end   = "15:25:12";
    4.  
    5.   list($bhour, $bminute, $bsecond) = explode(":", $begin);
    6.   list($ehour, $eminute, $esecond) = explode(":", $end);
    7.  
    8.   $bseconds = $bhour * 3600 + $bminute * 60 + $bsecond;
    9.   $eseconds = $ehour * 3600 + $eminute * 60+ $esecond;
    10.  
    11.   $minutes =abs (($eseconds - $bseconds) / 60);
    12.  echo $minutes;
    13. ?>
     
  12. Alex_pac

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

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    блин. эта функция была следущей в справочнике [​IMG]
    неувидел.