За последние 24 часа нас посетили 17069 программистов и 1629 роботов. Сейчас ищут 1446 программистов ...

вывод даты

Тема в разделе "PHP для новичков", создана пользователем Kiberlord077, 12 окт 2014.

  1. Kiberlord077

    Kiberlord077 Новичок

    С нами с:
    15 авг 2014
    Сообщения:
    14
    Симпатии:
    0
    Друзья предо мной стал вопрос о дате ...
    Нужно сделать так как на ask.fm -похожее видел
    Что бы поменять скушные циферки на "вчера" или"неделю назад " "или месяц назад " .А я кроме $date = date('Y-m-d H:i:s'); нечего не знаю... Помогите пожалуйста )
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    интервалы
    Код (PHP):
    1. function date_interval_human_text($interval, $labels = array('y' => 'г.', 'm' => 'мес.', 'd' => 'д.', 'h' => 'ч.', 'i' => 'мин.',)) {
    2.   $r = array();
    3.   /*      var_dump($interval);
    4.     object(DateInterval)[7]
    5.     public 'y' => int 0
    6.     public 'm' => int 0
    7.     public 'd' => int 9
    8.     public 'h' => int 0
    9.     public 'i' => int 33
    10.     public 's' => int 25
    11.     public 'invert' => int 1
    12.     public 'days' => int 9
    13.    *
    14.    */
    15.   foreach ($labels as $key => $val) {
    16.     if ($interval->$key != 0) {
    17.       $r [] = $interval->$key . $val;
    18.     }
    19.   }
    20.   if (!$r) {
    21.     $r [] = $interval->s . 'сек.';
    22.   }
    23.   return implode(' ', $r);
    24. } 
    Даты
    Код (PHP):
    1. function HumanDatePrecise($date) {
    2.   $r = false;
    3.   $a = preg_split("/[:\.\s-]+/", $date);
    4.   $d = time() - strtotime($date);
    5.   if ($d > 0) {
    6.     if ($d < 3600) {
    7.       //минут назад
    8.       switch (floor($d / 60)) {
    9.         case 0:
    10.         case 1:
    11.           return "<acronym title='$date'>только что</acronym>";
    12.           break;
    13.         case 2:
    14.           return "<acronym title='$date'>только что</acronym>";
    15.           break;
    16.         case 3:
    17.           return "<acronym title='$date'>три минуты назад</acronym>";
    18.           break;
    19.         case 4:
    20.           return "<acronym title='$date'>четыре минуты назад</acronym>";
    21.           break;
    22.         case 5:
    23.           return "<acronym title='$date'>пять минут назад</acronym>";
    24.           break;
    25.         default:
    26.           return "<acronym title='$date'>" . floor($d / 60) . ' мин. назад</acronym>';
    27.           break;
    28.       }
    29.     } elseif ($d < 18000) {
    30.       //часов назад
    31.       switch (floor($d / 3600)) {
    32.         case 1:
    33.           return "<acronym title='$date'>час назад</acronym>";
    34.           break;
    35.         case 2:
    36.           return "<acronym title='$date'>два часа назад</acronym>";
    37.           break;
    38.         case 3:
    39.           return "<acronym title='$date'>три часа назад</acronym>";
    40.           break;
    41.         case 4:
    42.           return "<acronym title='$date'>четыре часа назад</acronym>";
    43.           break;
    44.       };
    45.     } elseif ($d < 172800) {
    46.       //сегодня
    47.       //2011-07-14 16:20:44
    48.       // 0    1  2  3  4  5
    49.       if (date('d') == $a[2]) {
    50.         return "<acronym title='$date'>сегодня в {$a[3]}:{$a[4]}</acronym>";
    51.       }
    52.       if (date('d', time() - 86400) == $a[2]) {
    53.         return "<acronym title='$date'>вчера в {$a[3]}:{$a[4]}</acronym>";
    54.       }
    55.       if (date('d', time() - 172800) == $a[2]) {
    56.         return "<acronym title='$date'>позавчера в {$a[3]}:{$a[4]}</acronym>";
    57.       }
    58.     }
    59.   } else {
    60.     ////////////////////////////////////////////////////////////////////////////////////////
    61.     // В будущем   <editor-fold defaultstate="collapsed" desc="В будущем">
    62.     $d *= -1;
    63.     if ($d < 3600) {
    64.       //минут назад
    65.       switch (floor($d / 60)) {
    66.         case 0:
    67.         case 1:
    68.           return "<acronym title='$date'>сейчас</acronym>";
    69.           break;
    70.         case 2:
    71.           return "<acronym title='$date'>через две минуты</acronym>";
    72.           break;
    73.         case 3:
    74.           return "<acronym title='$date'>через три минуты</acronym>";
    75.           break;
    76.         case 4:
    77.           return "<acronym title='$date'>через четыре минуты</acronym>";
    78.           break;
    79.         case 5:
    80.           return "<acronym title='$date'>через пять минут</acronym>";
    81.           break;
    82.         default:
    83.           return "<acronym title='$date'>через " . floor($d / 60) . ' мин.</acronym>';
    84.           break;
    85.       }
    86.     } elseif ($d < 18000) {
    87.       //часов назад
    88.       switch (floor($d / 3600)) {
    89.         case 1:
    90.           return "<acronym title='$date'>через час</acronym>";
    91.           break;
    92.         case 2:
    93.           return "<acronym title='$date'>через два часа</acronym>";
    94.           break;
    95.         case 3:
    96.           return "<acronym title='$date'>через три часа</acronym>";
    97.           break;
    98.         case 4:
    99.           return "<acronym title='$date'>через четыре часа</acronym>";
    100.           break;
    101.       };
    102.     } elseif ($d < 172800) {
    103.       //сегодня
    104.       //2011-07-14 16:20:44
    105.       // 0    1  2  3  4  5
    106.       if (date('d') == $a[2]) {
    107.         return "<acronym title='$date'>сегодня в {$a[3]}:{$a[4]}</acronym>";
    108.       }
    109.       if (date('d', time() - 86400) == $a[2]) {
    110.         return "<acronym title='$date'>завтра в {$a[3]}:{$a[4]}</acronym>";
    111.       }
    112.       if (date('d', time() - 172800) == $a[2]) {
    113.         return "<acronym title='$date'>послезавтра в {$a[3]}:{$a[4]}</acronym>";
    114.       }
    115.     }
    116.     $d *= -1;
    117.     //, В будущем   </editor-fold>
    118.     ////////////////////////////////////////////////////////////////////////////////////////.
    119.   }
    120.  
    121.   $r = "{$a[2]}.{$a[1]}";
    122.   if ($a[0] != date('Y') OR $d > 0) {
    123.     $r .= '.' . $a[0];
    124.   }
    125.   $r .= {$a[3]}:{$a[4]}";
    126.   $date .= ', ' . self::$weekdays[(int)date('N', strtotime($date))];
    127.   return "<acronym title='$date'>$r</acronym>";
    128. } 
    Размер файла http://jeffreysambells.com/2012/10/25/human-readable-filesize-php
    Код (PHP):
    1. function human_filesize($bytes, $decimals = 2) {
    2.  
    3.     $size   = array('B','kB','MB','GB','TB','PB','EB','ZB','YB');
    4.     $factor = floor((strlen($bytes) - 1) / 3);
    5.  
    6.     return sprintf("%.{$decimals}f", $bytes/pow(1024, $factor)).@$size[$factor];
    7. } 
     
  3. Kiberlord077

    Kiberlord077 Новичок

    С нами с:
    15 авг 2014
    Сообщения:
    14
    Симпатии:
    0
    ого не думал так много прописовать ...можете обьяснить последнюю часть кода-зачем она вообще? и что делает)
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Написано же - human_filesize, т.е. человекопонятный размер файла (т.е. в килобайтах, мегабайтах и т.д., а не в байтах)