За последние 24 часа нас посетили 16972 программиста и 2211 роботов. Сейчас ищут 986 программистов ...

форматирование даты (готовый пример)

Тема в разделе "PHP для новичков", создана пользователем gkhelloworld, 18 июн 2010.

  1. gkhelloworld

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

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    PHP:
    1. <?php
    2.  
    3. function ro_formatting_date($date)
    4. {
    5.     $month = array( "01"=>"Января",
    6.                     "02"=>"Февраля",
    7.                     "03"=>"Марта",
    8.                     "04"=>"Апреля",
    9.                     "05"=>"Мая",
    10.                     "06"=>"Июня",
    11.                     "07"=>"Июля",
    12.                     "08"=>"Августа",
    13.                     "09"=>"Сентября",
    14.                     "10"=>"Октября",
    15.                     "11"=>"Ноября",
    16.                     "12"=>"Декабря"
    17.                     );
    18.     $datetounix_time    =   strtotime($date);
    19.     $elapsed_time       =   time()-$datetounix_time;
    20.    
    21.     // Y-m-d 00:00:00
    22.     $start_date         =   strtotime(date("Y-m-d",$datetounix_time));
    23.    
    24.     if ($elapsed_time < 0)
    25.     {
    26.         return "Your date does not match the server time.";
    27.         exit();
    28.     }
    29.     if ($elapsed_time <= 59)
    30.     {
    31.        
    32.         $str    = "только что";
    33.     }
    34.     else if ($elapsed_time <= 3569)
    35.     {
    36.         $dig    = (int) round($elapsed_time/60);
    37.        
    38.         if (    $dig == 1   ||
    39.                 $dig == 21  ||
    40.                 $dig == 31  ||
    41.                 $dig == 41  ||
    42.                 $dig == 51)
    43.         {
    44.             $case = "у";
    45.         }
    46.         else if (   $dig > 1  && $dig <= 4  ||
    47.                     $dig > 21 && $dig <= 24 ||
    48.                     $dig > 31 && $dig <= 34 ||
    49.                     $dig > 41 && $dig <= 44 ||
    50.                     $dig > 51 && $dig <= 54)
    51.         {
    52.             $case = "ы";
    53.         }
    54.         else if (   $dig > 4  && $dig <= 20 ||
    55.                     $dig > 24 && $dig <= 30 ||
    56.                     $dig > 34 && $dig <= 40 ||
    57.                     $dig > 44 && $dig <= 50 ||
    58.                     $dig > 54 && $dig <= 59)
    59.         {
    60.             $case = "";
    61.         }
    62.         else
    63.         {
    64.             $case = "_";
    65.         }
    66.  
    67.         $str = (($dig == 1) ? "" : $dig)." минут".$case." назад";
    68.     }
    69.     else if ($elapsed_time >= 3570 && $elapsed_time <= 21600)
    70.     {
    71.         $dig    = (int) round($elapsed_time/3600);
    72.        
    73.         if ($dig == 1)
    74.         {  
    75.             $dig    = "";  
    76.             $case   = "";
    77.         }
    78.         else if ($dig > 1 && $dig <= 4)
    79.         {
    80.             $case   = "а";
    81.         }
    82.         else if ($dig >= 5 && $dig <= 12)
    83.         {
    84.             $case   = "ов";
    85.         }
    86.        
    87.         $str    = (($dig == 1) ? "" : $dig)." час".$case." назад";
    88.     }
    89.     else if (strcmp(date("Y-m-d",$datetounix_time),date("Y-m-d")) == 0)
    90.     {
    91.         $str    = "сегодня в ".date("H:i",$datetounix_time);
    92.     }
    93.     else if (($start_date+86400) <= time() && time() <= ($start_date+(86400*2)))
    94.     {
    95.         $str    = "вчера в ".date("H:i",$datetounix_time);
    96.     }
    97.     else
    98.     {
    99.         $str    = date("d",strtotime($date))." ".$month[date("m",strtotime($date))]." ".date("Y",strtotime($date))." в ".date("H:i",strtotime($date));
    100.     }
    101.     return $str;   
    102. }
    103.  
    104. ?>
    Написал вот такой скрипт, для отображения красивой даты
    хотелось бы услышать о минусах и плюсах, и вообще правильно я подошел к созданию скрипта...
     
  2. gkhelloworld

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

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    Строка 93:
    Код (Text):
    1. else if (($start_date+86400) <= time() && time() <= ($start_date+(86400*2)))
    мне кажется что такой подход вычисления вчерашней даты не очень правильный... я пытался как-то по другому пересмотреть но пока не могу ничего придумать ...
     
  3. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    time() - $start_date < 86400 ?


    PHP:
    1. <?php
    2.  
    3. function shortdate ($date) {
    4.   $r = false;
    5.   $a = preg_split("/[:\.\s-]+/", $date);
    6.   $du = time() - get_unix($date);
    7.   if ($du < 3600) {
    8.     //минут назад
    9.     switch (floor($du/60)) {
    10.       case 1:
    11.         return 'только что';
    12.         break;
    13.       case 2:
    14.         return 'только что';
    15.         break;
    16.       case 3:
    17.         return 'три минуты назад';
    18.         break;
    19.       case 4:
    20.         return 'четыре минуты назад';
    21.         break;
    22.       case 5:
    23.         return 'пять минут минуты назад';
    24.         break;
    25.       default:
    26.         return floor($du/60).' мин. назад';
    27.         break;
    28.  
    29.     };
    30.   } elseif ($du < 18000) {
    31.     //часов назад
    32.     switch (floor($du/3600)) {
    33.       case 1:
    34.         return 'час назад';
    35.         break;
    36.       case 2:
    37.         return 'два часа назад';
    38.         break;
    39.       case 3:
    40.         return 'три часа назад';
    41.         break;
    42.       case 4:
    43.         return 'четыре часа назад';
    44.         break;
    45.     };
    46.   } elseif ($du < 172800) {
    47.     //сегодня
    48.     if (date('d')==$a[2]) { return "сегодня в {$a[3]}:{$a[4]}";}
    49.     if (date('d', time() - 86400)==$a[2]) { return "вчера в {$a[3]}:{$a[4]}";}
    50.     if (date('d', time() - 172800)==$a[2]) { return "позавчера в {$a[3]}:{$a[4]}";}
    51.   } else {
    52.     $r = "{$a[2]}.{$a[1]}";
    53.     if ($a[0] != date('Y')) {
    54.       $r .= '.'.$a[0];
    55.     }
    56.     $r .= " {$a[3]}:{$a[4]}";
    57.   }
    58. return $r;
    59.  
    60. }
    61.  
    62.  
    63.  
    64. function get_unix ($date='') {
    65.   if ($date=='') {
    66.     return time();
    67.   }
    68.   $cyear = 0;
    69.   $cmonth = 0;
    70.   $cday = 0;
    71.   $chour = 0;
    72.   $cminu = 0;
    73.   $csecu = 0;
    74.   $t=array();
    75.   $t= preg_split("/[:\.\s-]+/", $date);
    76.   if (isset($t[0])) {
    77.     $cyear = (int)$t[0];
    78.   }
    79.   if (isset($t[1])) {
    80.     $cmonth =(int)$t[1];
    81.   }
    82.   if (isset($t[2])) {
    83.     $cday =  (int)$t[2];
    84.   }
    85.   if (isset($t[3])) {
    86.     $chour = (int)$t[3];
    87.   }
    88.   if (isset($t[4])) {
    89.     $cminu = (int)$t[4];
    90.   }
    91.   if (isset($t[5])) {
    92.     $csecu = (int)$t[5];
    93.   }
    94.   return  mktime((int)$chour, (int)$cminu, (int)$csecu, (int)$cmonth, (int)$cday, (int)$cyear);
    95. }
    96.  
    97. ?>
    Когда мне надо было - сделал такие наброски, но доводить до ума не стал. Хотя изрядно можно напильником подлатать.