2010-08-13 26 views
7

我试图使用date_diff()未定义date_diff()

$datetime1 = date_create('19.03.2010'); 
$datetime2 = date_create('22.04.2010'); 
$interval = date_diff($datetime1, $datetime2); 
echo $interval->format('%R%d days'); 

它不适合我的工作,给出了一个错误:

Call to undefined function date_diff() 

我怎样才能得到它的工作?

使用PHP 5.2。

谢谢。

回答

12

函数date_diff需要5.3或更高版本的PHP版本。

UPDATE

为PHP 5.2的一个例子(从date_diff用户评论截取)。

<?php 
function date_diff($date1, $date2) { 
    $current = $date1; 
    $datetime2 = date_create($date2); 
    $count = 0; 
    while(date_create($current) < $datetime2){ 
     $current = gmdate("Y-m-d", strtotime("+1 day", strtotime($current))); 
     $count++; 
    } 
    return $count; 
} 

echo (date_diff('2010-3-9', '2011-4-10')." days <br \>"); 
?> 
+0

任何方式使用它在PHP 5.2? – James 2010-08-13 09:44:53

+0

添加了一个变体。 – 2010-08-13 09:50:09

+7

这个解决方案效率很低 – James 2010-08-13 10:18:31

1

这是一个不使用Date对象的版本,但这些在5.2中无论如何都没有用处。

function date_diff($d1, $d2){ 
    $d1 = (is_string($d1) ? strtotime($d1) : $d1); 
    $d2 = (is_string($d2) ? strtotime($d2) : $d2); 
    $diff_secs = abs($d1 - $d2); 
    return floor($diff_secs/(3600 * 24)); 
} 
+0

我不会推荐使用这种方法,因为它不考虑可能的夏令时变化: <! - language:lang-php - > ini_set('date.timezone','America/Los_Angeles') ; echo _date_diff('2011-03-13','2011-03-14'); >> 0 – 2013-03-21 12:22:04

1
function date_diff($date1, $date2) { 
$count = 0; 
//Ex 2012-10-01 and 2012-10-20 
if(strtotime($date1) < strtotime($date2)) 
{      
    $current = $date1;     
    while(strtotime($current) < strtotime($date2)){ 
     $current = date("Y-m-d",strtotime("+1 day", strtotime($current))); 
     $count++; 
    } 
}     
//Ex 2012-10-20 and 2012-10-01 
else if(strtotime($date2) < strtotime($date1)) 
{   
    $current = $date2;     
    while(strtotime($current) < strtotime($date1)){ 
     $current = date("Y-m-d",strtotime("+1 day", strtotime($current))); 
     $count++; 
    } 
    $current = $current * -1; 
} 
return $count; } 
+0

请解释你的答案。 – hims056 2012-12-20 11:29:06

0

首先这两个日期转换为毫米/ dd/yyyy格式,然后做到这一点:

$DateDiff = floor(strtotime($datetime2) - strtotime($datetime1))/86400 ; 

//this will yield the resultant difference in days 
0

转换您的日期时间为Unix日期类型,并从一个中减去另一个: 的格式 - >(“U”)是DateTime转换的地方。

$datetime1 = date_create('19.03.2010'); 
$datetime2 = date_create('22.04.2010'); 
$intervalInDays = ($datetime2->format("U") - $datetime1->format("U"))/(3600 * 24); 

不知道这是否是Y2K38安全,但它是最简单的date_diff解决方法之一。