如何计算PHP中两个日期时间之间的微小差异?
以上答案适用于旧版本的PHP.现在使用DateTime类进行任何日期计算,因为PHP 5.3是常态.例如.
$start_date = new DateTime('2007-09-01 04:10:58'); $since_start = $start_date->diff(new DateTime('2012-09-11 10:25:00')); echo $since_start->days.' days total
'; echo $since_start->y.' years
'; echo $since_start->m.' months
'; echo $since_start->d.' days
'; echo $since_start->h.' hours
'; echo $since_start->i.' minutes
'; echo $since_start->s.' seconds
';
$ since_start是一个DateInterval对象.请注意,days属性是可用的(因为我们使用DateTime类的diff方法来生成DateInterval对象).
上面的代码将输出:
1837天总计
5年
0个月
10天
6小时
14分
2秒
要获得总分钟数:
$minutes = $since_start->days * 24 * 60; $minutes += $since_start->h * 60; $minutes += $since_start->i; echo $minutes.' minutes';
这将输出:
2645654分钟
这是两个日期之间经过的实际分钟数.DateTime类将夏令时(取决于时区)考虑在内,而"旧方式"则不会.阅读有关日期和时间的手册http://www.php.net/manual/en/book.datetime.php
这是答案:
$to_time = strtotime("2008-12-13 10:42:00"); $from_time = strtotime("2008-12-13 10:21:00"); echo round(abs($to_time - $from_time) / 60,2). " minute";
从过去最多的一个减去过去最多的一个并除以60.
时间以Unix格式完成,所以它们只是一个显示秒数的大数字 January 1, 1970, 00:00:00 GMT
它适用于我的程序,我使用date_diff
,你可以date_diff
在这里检查手册.
$start = date_create('2015-01-26 12:01:00'); $end = date_create('2015-01-26 13:15:00'); $diff=date_diff($end,$start); print_r($diff);
你得到你想要的结果.
时区的另一种方式.
$start_date = new DateTime("2013-12-24 06:00:00",new DateTimeZone('Pacific/Nauru')); $end_date = new DateTime("2013-12-24 06:45:00", new DateTimeZone('Pacific/Nauru')); $interval = $start_date->diff($end_date); $hours = $interval->format('%h'); $minutes = $interval->format('%i'); echo 'Diff. in minutes is: '.($hours * 60 + $minutes);
我为我的博客网站写了这个函数(过去的日期和服务器的日期之间的差异).它会给你一个像这样的输出
"49秒前","20分钟前","21小时前"等等
我使用了一个函数,它可以让我了解传递的日期和服务器的日期之间的差异.
format('%s Seconds %i Minutes %h Hours %d days %m Months %y Year Ago')."
"; $min=$interval->format('%i'); $sec=$interval->format('%s'); $hour=$interval->format('%h'); $mon=$interval->format('%m'); $day=$interval->format('%d'); $year=$interval->format('%y'); if($interval->format('%i%h%d%m%y')=="00000") { //echo $interval->format('%i%h%d%m%y')."
"; return $sec." Seconds"; } else if($interval->format('%h%d%m%y')=="0000"){ return $min." Minutes"; } else if($interval->format('%d%m%y')=="000"){ return $hour." Hours"; } else if($interval->format('%m%y')=="00"){ return $day." Days"; } else if($interval->format('%y')=="0"){ return $mon." Months"; } else{ return $year." Years"; } } ?>
将其保存为文件,假设为"date.php".从这样的另一个页面调用该函数
"; echo dateDiff($mydate); ?>
当然,您可以修改函数以传递两个值.
我想这会对你有所帮助
function calculate_time_span($date){ $seconds = strtotime(date('Y-m-d H:i:s')) - strtotime($date); $months = floor($seconds / (3600*24*30)); $day = floor($seconds / (3600*24)); $hours = floor($seconds / 3600); $mins = floor(($seconds - ($hours*3600)) / 60); $secs = floor($seconds % 60); if($seconds < 60) $time = $secs." seconds ago"; else if($seconds < 60*60 ) $time = $mins." min ago"; else if($seconds < 24*60*60) $time = $hours." hours ago"; else if($seconds < 24*60*60) $time = $day." day ago"; else $time = $months." month ago"; return $time; }
function date_getFullTimeDifference( $start, $end ) { $uts['start'] = strtotime( $start ); $uts['end'] = strtotime( $end ); if( $uts['start']!==-1 && $uts['end']!==-1 ) { if( $uts['end'] >= $uts['start'] ) { $diff = $uts['end'] - $uts['start']; if( $years=intval((floor($diff/31104000))) ) $diff = $diff % 31104000; if( $months=intval((floor($diff/2592000))) ) $diff = $diff % 2592000; if( $days=intval((floor($diff/86400))) ) $diff = $diff % 86400; if( $hours=intval((floor($diff/3600))) ) $diff = $diff % 3600; if( $minutes=intval((floor($diff/60))) ) $diff = $diff % 60; $diff = intval( $diff ); return( array('years'=>$years,'months'=>$months,'days'=>$days, 'hours'=>$hours, 'minutes'=>$minutes, 'seconds'=>$diff) ); } else { echo "Ending date/time is earlier than the start date/time"; } } else { echo "Invalid date/time data detected"; } }
这就是我在php> 5.2中显示“ xx次之前”的方式。这是有关DateTime对象的更多信息
//Usage: $pubDate = $row['rssfeed']['pubDates']; // e.g. this could be like 'Sun, 10 Nov 2013 14:26:00 GMT' $diff = ago($pubDate); // output: 23 hrs ago // Return the value of time different in "xx times ago" format function ago($timestamp) { $today = new DateTime(date('y-m-d h:i:s')); // [2] //$thatDay = new DateTime('Sun, 10 Nov 2013 14:26:00 GMT'); $thatDay = new DateTime($timestamp); $dt = $today->diff($thatDay); if ($dt->y > 0) { $number = $dt->y; $unit = "year"; } else if ($dt->m > 0) { $number = $dt->m; $unit = "month"; } else if ($dt->d > 0) { $number = $dt->d; $unit = "day"; } else if ($dt->h > 0) { $number = $dt->h; $unit = "hour"; } else if ($dt->i > 0) { $number = $dt->i; $unit = "minute"; } else if ($dt->s > 0) { $number = $dt->s; $unit = "second"; } $unit .= $number > 1 ? "s" : ""; $ret = $number." ".$unit." "."ago"; return $ret; }
一个更通用的版本,返回结果包括天,小时,分钟或秒,包括分数/小数:
function DateDiffInterval($sDate1, $sDate2, $sUnit='H') { //subtract $sDate2-$sDate1 and return the difference in $sUnit (Days,Hours,Minutes,Seconds) $nInterval = strtotime($sDate2) - strtotime($sDate1); if ($sUnit=='D') { // days $nInterval = $nInterval/60/60/24; } else if ($sUnit=='H') { // hours $nInterval = $nInterval/60/60; } else if ($sUnit=='M') { // minutes $nInterval = $nInterval/60; } else if ($sUnit=='S') { // seconds } return $nInterval; } //DateDiffInterval