我正在尝试计算两个日期之间的时间间隔。这是我的代码
$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的时区设置,它很好。
我将非常感谢您的帮助
检查/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;
注意:我建议您将所有内容都存储在数据库中的时间戳中,而不是日期中。在您的显示逻辑中,将其转换为日期,或查找其年龄等。请在Datetime vs 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;
}
}
简单方法
试试这个:
$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]