За последние 24 часа нас посетили 21245 программистов и 1161 робот. Сейчас ищут 697 программистов ...

Как вычислить продолжительность

Тема в разделе "Вопросы от блондинок", создана пользователем sound, 11 окт 2007.

  1. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    а теперь ещё научите скрипт разбирать даты вида «13 плювиоза первого года» :)
     
  2. basist

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

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    Luge, на правах изврещения
    PHP:
    1. <?php
    2.   $from=array(
    3.    "вандемьера",
    4.    "брюмера",
    5.    "фримера",
    6.    "нивоза",
    7.    "плювиоза",
    8.    "вантоза",
    9.    "жерминаля",
    10.    "флореаля",
    11.    "прериаля",
    12.    "мессидора",
    13.    "термидора",
    14.    "фрюктидора"
    15.     );
    16.   $to=array(
    17.    "1",
    18.    "2",
    19.    "3",
    20.    "4",
    21.    "5",
    22.    "6",
    23.    "7",
    24.    "8",
    25.    "9",
    26.    "10",
    27.    "11",
    28.    "12",
    29.    );
    30.    $text=preg_replace($from, $to, $text);
    31. ?>
    32.  
    и т.д. :):):)
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    угу, только первый днь первого года это 22 сентября 1792 и в месяце 30 дней ;)
     
  4. basist

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

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    и всего 5(6) праздников :(:(
     
  5. Mavir

    Mavir Guest

    Не правильно. Ноль: 1970-01-01 00:00:00. А три часа набегает за счет временной зоны.

    Например, у меня date('Y-m-d H:i:s', 0) будет 1970-01-01 02:00:00. На Камчатке - 1970-01-01 12:00:00
     
  6. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    А, точно что то я стормозил... значит нужно отнимать не 3, а временную зону!
     
  7. nemec

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

    С нами с:
    20 дек 2006
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    malnova, latgola
    Код (Text):
    1. <?php
    2. $lang['seconds'] = 'sekundi';
    3.  
    4. echo show_added('1983-05-05 22:00:00', 10, '2008-05-05 22:00:00');
    5.  
    6. //translation function
    7. function lng($arg)
    8. {
    9.     global $lang;
    10.     if (isset($lang[$arg]))
    11.     {
    12.         return $lang[$arg];
    13.     }
    14.     return $arg;
    15. }
    16.  
    17. // 1st parametr - given value is 0000-00-00 00:00:00
    18. // here i create how to display date different before now date (if not now insert 3rd parametr as date) and given value,
    19. // displayed variable is 2nd parametr
    20. function show_added($date, $short = 3, $t2='')
    21. {
    22.     $t1=strtotime($date);
    23.     $t2=empty($t2) ? time() : strtotime($t2);
    24.     if($t1 > $t2)
    25.     {
    26.       $time1 = $t2;
    27.       $time2 = $t1;
    28.     }
    29.     else
    30.     {
    31.       $time1 = $t1;
    32.       $time2 = $t2;
    33.     }
    34.     $diff = array(
    35.       'years' => 0,
    36.       'months' => 0,
    37.       'weeks' => 0,
    38.       'days' => 0,
    39.       'hours' => 0,
    40.       'minutes' => 0,
    41.       'seconds' =>0
    42.     );
    43.     foreach(array_keys($diff) as $unit)
    44.     {
    45.       while(TRUE)
    46.       {
    47.          $next = strtotime("+1 $unit", $time1);
    48.          if($next < $time2)
    49.          {
    50.             $time1 = $next;
    51.             $diff[$unit]++;
    52.          }
    53.          else
    54.          {
    55.             break;
    56.          }
    57.       }
    58.     }
    59.     $difference = '';
    60.     $a = 0;
    61.     foreach($diff as $unit => $value)
    62.     {
    63.         if(!empty($value))
    64.         {
    65.            
    66.             $difference .= ($a > 0 ? ' '.lng('and') . ' ' : '') . ($value . ' ' . lng($unit));
    67.             $a++;
    68.             if($a >= $short)
    69.             {
    70.                 break;
    71.             }
    72.         }
    73.     }
    74.     $difference = empty($difference) ? "0 ". lng('seconds') : $difference;
    75.     return $difference;
    76. }
    77. ?>