我正在尝试计算两个日期之间的时间间隔。所以这是我的代码
$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的时区设置,很不错。
我将非常感谢你的帮助
答案 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]