2011-01-22 49 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 2011-01-22 20:46:45

+0

是的,我同意你的看法,即在php5中有很好的功能,但是我只需要在php4中做這個工作,因爲我必須爲php4提供支持。 – sagar27 2011-01-23 05:44:38

回答

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天。

3

使用mktime獲取日期的Unix時間戳。那麼你得到的區別:

$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 2011-01-23 05:53:28