2011-01-22 4 views
1

Мне нужна функция в php4, которая рассчитает разницу дат в предоставленном формате даты. например.Рассчитать разницу дат в данном формате в PHP4

$date1 = "2011-08-24 10:03:00"; 
$date2 = "2012-09-24 10:04:31"; 
$format1 = "Y W" ; //This format should return the difference in Year and week. 
$format2 = "M D"; // This format should return the difference in Months and days. 
// The format can be any combination of Year,Month,Day,Week,Hour,Minute,Second. 

function ConvertDate($data1,$date2,$format) 

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация об этом. Спасибо заранее.

+3

Как будто мне действительно нужно это сказать, но вам действительно нужно **, чтобы сначала обновить версию PHP. PHP4 не поддерживается в течение некоторого времени ... – ircmaxell

+0

Да, действительно, я согласен с вами в том, что в php5 есть хорошие функции для этой вещи, но мне нужно сделать это в php4 только потому, что мне также нужно поддерживать php4. – sagar27

ответ

3

Давайте попробуем что-нибудь подобное.

function ConvertDate($date1, $date2, $format) 
{ 
    static $formatDefinitions = array(
     'Y' => 31536000, 
     'M' => 2592000, 
     'W' => 604800, 
     'D' => 86400, 
     'H' => 3600, 
     'i' => 60, 
     's' => 1 
    ); 

    $ts1 = strtotime($date1); 
    $ts2 = strtotime($date2); 
    $delta = abs($ts1 - $ts2); 

    $seconds = array(); 
    foreach ($formatDefinitions as $definition => $divider) { 
     if (false !== strpos($format, $definition)) { 
      $seconds[$definition] = floor($delta/$divider); 
      $delta = $delta % $divider; 
     } 
    } 

    return strtr($format, $seconds); 
} 

Просто имейте в виду, что месяцы и годы, только по оценкам, потому что вы не можете сказать «сколько секунд в месяц» (так как «месяц» может быть что-нибудь между 28 и 31 дней). Моя функция насчитывает 30 месяцев.

+0

btw Я не совсем уверен, есть ли в PHP4 статические переменные. Если нет, просто удалите статическое ключевое слово :) – Andrewsville

+0

PHP говорит: «Для совместимости с PHP 4, если объявление видимости не используется, свойство или метод будут обрабатываться так, как если бы он был объявлен как открытый». – Donovan

+0

Спасибо за ответ. – sagar27

3

Получите отметки времени Unix ваших дат, используя mktime. Затем вы получите разницу для:

$years = floor(($date2-$date1)/31536000); 
$months = floor(($date2-$date1)/2628000); 
$days = floor(($date2-$date1)/86400); 
$hours = floor(($date2-$date1)/3600); 
$minutes = floor(($date2-$date1)/60); 
$seconds = ($date2-$date1); 

Надеюсь, это поможет.
-Alberto

+0

Спасибо за ответ. – sagar27

Смежные вопросы