如果我有一些字符串$ startDate和$ endDate设置为(例如)“2011/07/01”和“2011/07/17”(意思是2011年7月1日和2011年7月17日)。我如何计算从开始日期到结束日期的日期?在给出的例子中,这将是17天。如何计算PHP中两个日期之间的天数?
回答
这里是原始的方式来做到这一点
$startTimeStamp = strtotime("2011/07/01");
$endTimeStamp = strtotime("2011/07/17");
$timeDiff = abs($endTimeStamp - $startTimeStamp);
$numberDays = $timeDiff/86400; // 86400 seconds in one day
// and you might want to convert to integer
$numberDays = intval($numberDays);
PHP有一个date_diff()函数来做到这一点。
Use DateTime::diff
(又名date_diff
):
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
或者:
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
然后,您可以通过调用$interval->days
得到的间隔为整数。
这似乎不适用于我最初的字符串“2011/07/01”和“2011/07/17”...“打电话给未定义的函数date_diff()..“。我使用PHP 5.2.10 – cannyboy 2010-09-06 21:40:21
根据文档(链接在顶部),这是PHP> = 5.3.0。下次,请在您的问题中包含PHP版本。 – wuputah 2010-09-06 23:13:02
只有在您的日期时间没有时间时才有效,否则它可能会返回1-2天到几个 – Dukeatcoding 2014-01-22 14:09:06
无解的工作对我来说。对于那些谁仍然在PHP 5.2(日期时间:: DIFF在5.3推出),该解决方案的工作原理:
function howDays($from, $to) {
$first_date = strtotime($from);
$second_date = strtotime($to);
$offset = $second_date-$first_date;
return floor($offset/60/60/24);
}
<?php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
?>
如果你的日期时间也已小时:分钟:秒,你还是希望有天数..
/**
* Returns the total number of days between to DateTimes,
* if it is within the same year
* @param $start
* @param $end
*/
public function dateTimesToDays($start,$end){
return intval($end->format('z')) - intval($start->format('z')) + 1;
}
如果你想知道的天数(如果有的话)的秒数,小时(如果有的话)的数量,minutues(如果有的话),并可以执行以下操作:
$previousTimeStamp = strtotime("2011/07/01 21:12:34");
$lastTimeStamp = strtotime("2013/09/17 12:34:11");
$menos=$lastTimeStamp-$previousTimeStamp;
$mins=$menos/60;
if($mins<1){
$showing= $menos . " seconds ago";
}
else{
$minsfinal=floor($mins);
$secondsfinal=$menos-($minsfinal*60);
$hours=$minsfinal/60;
if($hours<1){
$showing= $minsfinal . " minutes and " . $secondsfinal. " seconds ago";
}
else{
$hoursfinal=floor($hours);
$minssuperfinal=$minsfinal-($hoursfinal*60);
$days=$hoursfinal/24;
if($days<1){
$showing= $hoursfinal . "hours, " . $minssuperfinal . " minutes and " . $secondsfinal. " seconds ago";
}
else{
$daysfinal=floor($days);
$hourssuperfinal=$hoursfinal-($daysfinal*24);
$showing= $daysfinal. "days, " .$hourssuperfinal . " hours, " . $minssuperfinal . " minutes and " . $secondsfinal. " seconds ago";
}}}
echo $showing;
您可以使用相同的逻辑如果你想增加几个月和几年。
简单的方法来计算的,
$currentdate = date('Y-m-d H:i:s');
$after1yrdate = date("Y-m-d H:i:s", strtotime("+1 year", strtotime($data)));
$diff = (strtotime($after1yrdate) - strtotime($currentdate))/(60 * 60 * 24);
echo "<p style='color:red'>The difference is ".round($diff)." Days</p>";
您可以使用date_diff
计算两个日期之间的差值:
$date1 = date_create("2013-03-15");
$date2 = date_create("2013-12-12");
$diff = date_diff($date1 , $date2);
echo $diff->format("%R%a days");
$date1 = date_create("2017-04-15");
$date2 = date_create("2017-05-18");
//difference between two dates
$diff = date_diff($date1,$date2);
//count days
echo 'Days Count - '.$diff->format("%a");
看到http://stackoverflow.com/questions/2040560 /发现这两天之间的天数 – 2016-01-04 20:16:12