Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


PHP код: Выделить весь код

<?php

function duration$date1$date2$if_reached=null )
{
   
$int_seconds strtotime $date2 ) - strtotime $date1 );
   
$key_suffix 's';
   
$periods = array(
                 
#  'year'        => 31557600,   // 1 year = 365.25 day
                   
'year'        => 31536000,    // 1 year = 365 day
                 #  'month'        => 2629800,   // 1 month = 1/12 year
                    
'month'        => 2628000,   // 1 month = 1/12 year
                   
'day'        => 86400,
                   
'hour'        => 3600,
                   
'minute'    => 60,
                   
'second'    => 1
                   
);

   
// used to hide 0's in higher periods
   
$flag_hide_zero true;

   
// do the loop thang
   
foreach( $periods as $key => $length )
   {
       
// calculate
       
$temp floor$int_seconds $length );
       
       
#echo '-'.$temp;

       // determine if temp qualifies to be passed to output
       
if( !$flag_hide_zero || $temp )
       {
           
// store in an array
           
$build[] = $temp.' '.$key.($temp!=1?'s':null);

           
// set flag to false, to allow 0's in lower periods
           
$flag_hide_zero false;
       }

       
// get the remainder of seconds
       
$int_seconds fmod($int_seconds$length);
   }

   
// return output, if !empty, implode into string, else output $if_reached
   
return ( !empty($build) ? implode(', '$build):$if_reached );
}

  echo 
duration ('2009-12-29 16:20:49''2010-12-29 16:21:00');
?>

Но всё-таки есть небольшой косяк, в примере на самом деле разница практически составляет 365 дней. Плюс 11 секунд, но из-за високосных годов год равен не 365 дней, а 365.25. Вот и получилось "11 months, 30 days, 4 hours, 30 minutes, 11 seconds" А так вроде как и ничего, работает

===
Исправил.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Последний раз редактировалось Igor_I, 30-12-2009 в 00:34.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:14, 30-12-2009 | #12