Php new DateTime()无法在我的新服务器上运行

时间:2013-12-14 07:08:50

标签: php datetime

我正在尝试计算两个日期之间的时间间隔。所以这是我的代码

    $start_date = new DateTime("$date1");
$end_date = new DateTime("$date2");
$interval = $start_date->diff($end_date);

$days = $interval->d;
$months = $interval->m;
$years = $interval->y;
$hours = $interval->h;
$mins = $interval->i;
$secs = $interval->s;

当我尝试回显结果时,它返回一个空结果。

这个代码在我的开发服务器和localhost上工作,只要我改为另一台服务器就停止响应。

我检查了php.ini的时区设置,很不错。

我将非常感谢你的帮助

3 个答案:

答案 0 :(得分:7)

检查/ etc / php5 / apache2 /和/ etc / php5 / cli /文件夹中的php.ini文件。两个文件都必须声明默认时区,例如。 date.timezone =" America / New_York"

您可以让它工作的其他方式是在创建DateTime对象之前在代码中声明它

date_default_timezone_set('America/New_York');
$start_date = new DateTime("$date1");
$end_date = new DateTime("$date2");
$interval = $start_date->diff($end_date);

$days = $interval->d;
$months = $interval->m;
$years = $interval->y;
$hours = $interval->h;
$mins = $interval->i;
$secs = $interval->s;

答案 1 :(得分:1)

注意:我建议您将所有内容存储在数据库中的时间戳中,而不是存储在日期中。并在您的显示逻辑中,将其转换为日期,或查找它的年龄等。请阅读日期时间与时间戳Should I use field 'datetime' or 'timestamp'?

下面,找到两个函数来查找两个时间戳之间的时差,并获得与现在相比的旧时间戳的年龄。

<?php  
echo whatAge(#SOME TIMESTAMP HERE#)
echo getDiff(#TIMESTAMP1, TIMESTAMP2#)
?>

这给你一小时一分钟。修改下面的secondsToTime函数以获取其他内容。

使用以下功能......

function whatAge($old_time){
$current_time   =   getdate(time())[0];
$time_diff      =   $current_time-$old_time;
return secondsToTime($time_diff,'string');
}

function getDiff($time1, $time2){
$time_diff      =   $time1-$time2;
return secondsToTime($time_diff,'string');
}

function secondsToTime($inputSeconds, $return='array') {

/** https://stackoverflow.com/questions/8273804/convert-seconds-into-days-hours-minutes-and-seconds */

$secondsInAMinute = 60;
$secondsInAnHour  = 60 * $secondsInAMinute;
$secondsInADay    = 24 * $secondsInAnHour;

// extract days
$days = floor($inputSeconds / $secondsInADay);

// extract hours
$hourSeconds = $inputSeconds % $secondsInADay;
$hours = floor($hourSeconds / $secondsInAnHour);

// extract minutes
$minuteSeconds = $hourSeconds % $secondsInAnHour;
$minutes = floor($minuteSeconds / $secondsInAMinute);

// extract the remaining seconds
$remainingSeconds = $minuteSeconds % $secondsInAMinute;
$seconds = ceil($remainingSeconds);

// return the final array
$obj    = array(
        'd' => (int) $days,
        'h' => (int) $hours,
        'm' => (int) $minutes,
        's' => (int) $seconds,
);

$str    =   function($d,$h,$m,$s){
    if($d>0){
        return "$d d, $h h $m m";
    }else{
        return "$h h $m m";
    }
};

switch ($return){

        case    'array'  :  return $obj;    break;
        case    'string' :  return $str($obj['d'],$obj['h'],$obj['m'],$obj['s']);   break;

    }
}

答案 2 :(得分:0)

简单方法

试试这个:

$date1 = new DateTime("2007-03-24");
$date2 = new DateTime("2009-06-26");
$interval = $date1->diff($date2);
echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 

阅读更多[php DateTime :: diff manual] [1]