За последние 24 часа нас посетили 62998 программистов и 1739 роботов. Сейчас ищут 874 программиста ...

Вывод разницы времени с точностью до секунды

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

  1. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Добрый день.
    Получаю разницу во времени так:
    PHP:
    1. $time = human_time_diff( $from, $to );
    Выводит, например, так: 1 час, 45 минут
    Поделитесь пожалуйста сниппетом, чтобы выводить вплоть до секунд.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    если ЧО:
    wp-includes/formatting.php

    PHP:
    1. function human_time_diff( $from, $to = '' ) {
    2.     if ( empty( $to ) ) {
    3.         $to = time();
    4.     }
    5.     $diff = (int) abs( $to - $from );
    6.     if ( $diff < HOUR_IN_SECONDS ) {
    7.         $mins = round( $diff / MINUTE_IN_SECONDS );
    8.         if ( $mins <= 1 )
    9.             $mins = 1;
    10.         /* translators: Time difference between two dates, in minutes (min=minute). 1: Number of minutes */
    11.         $since = sprintf( _n( '%s min', '%s mins', $mins ), $mins );
    12.     } elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) {
    13.         $hours = round( $diff / HOUR_IN_SECONDS );
    14.         if ( $hours <= 1 )
    15.             $hours = 1;
    16.         /* translators: Time difference between two dates, in hours. 1: Number of hours */
    17.         $since = sprintf( _n( '%s hour', '%s hours', $hours ), $hours );
    18.     } elseif ( $diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS ) {
    19.         $days = round( $diff / DAY_IN_SECONDS );
    20.         if ( $days <= 1 )
    21.             $days = 1;
    22.         /* translators: Time difference between two dates, in days. 1: Number of days */
    23.         $since = sprintf( _n( '%s day', '%s days', $days ), $days );
    24.     } elseif ( $diff < MONTH_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) {
    25.         $weeks = round( $diff / WEEK_IN_SECONDS );
    26.         if ( $weeks <= 1 )
    27.             $weeks = 1;
    28.         /* translators: Time difference between two dates, in weeks. 1: Number of weeks */
    29.         $since = sprintf( _n( '%s week', '%s weeks', $weeks ), $weeks );
    30.     } elseif ( $diff < YEAR_IN_SECONDS && $diff >= MONTH_IN_SECONDS ) {
    31.         $months = round( $diff / MONTH_IN_SECONDS );
    32.         if ( $months <= 1 )
    33.             $months = 1;
    34.         /* translators: Time difference between two dates, in months. 1: Number of months */
    35.         $since = sprintf( _n( '%s month', '%s months', $months ), $months );
    36.     } elseif ( $diff >= YEAR_IN_SECONDS ) {
    37.         $years = round( $diff / YEAR_IN_SECONDS );
    38.         if ( $years <= 1 )
    39.             $years = 1;
    40.         /* translators: Time difference between two dates, in years. 1: Number of years */
    41.         $since = sprintf( _n( '%s year', '%s years', $years ), $years );
    42.     }
    43.     /**
    44.      * Filters the human readable difference between two timestamps.
    45.      *
    46.      * @since 4.0.0
    47.      *
    48.      * @param string $since The difference in human readable text.
    49.      * @param int    $diff  The difference in seconds.
    50.      * @param int    $from  Unix timestamp from which the difference begins.
    51.      * @param int    $to    Unix timestamp to end the time difference.
    52.      */
    53.     return apply_filters( 'human_time_diff', $since, $diff, $from, $to );
    54. }
    --- Добавлено ---
    секунды не учитывались
     
  3. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Про секунды в Wordpress я знаю. Ну, собственно, и разницу в секундах между датами я тоже получил. Может, кто видел, как на php преобразовать, например, 200 секунд в 3 минуты 20 секунд.
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Любой, кто заглядывал в документацию. ;)
    Например:
    PHP:
    1. echo strftime('%M минуты %S секунд', 200);
     
    Fell-x27 и MouseZver нравится это.
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    Это называется - как заменить вордпрессовское говно одной строкой
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    @MouseZver, функция от WordPress больше делает.
     
  7. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ну, по-хорошему надо еще взять функцию, которая будет правильно склонять существительные. А то можно получить "8 минуты 22 секунд"
     
  8. виталий032

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

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    Полагаю, что с Timestamp проблем не возникнет.

    Вот еще способ:
    С вордпресс не практиковался, возможно понадобиться написать в начале файла:
    PHP:
    1. use DateTime;
    PHP:
    1. $from = DateTime::createFromFormat("Y-m-d H:i:s", "2016-06-01 15:13:12"); // (формат передаваемой даты, передаваемая дата)
    2. $to = new DateTime('now');
    3. echo $from->diff($to)->format('%m месяц(-ев) %d дней(-я) %H час(-ов) %i минут(-у,-ы) %s секунд(-ы) назад');
     
    #8 виталий032, 5 дек 2017
    Последнее редактирование: 5 дек 2017