我试图返回两个日期之间的差异,我根据example found on stackoverflow
工作我的问题?我得到完全错误的结果返回,以下代码返回30年,0个月,9天,显然应该只有7天或1周。
代码如下:
date_default_timezone_set('America/Los_Angeles');
$pickupDate = '2016-10-13';
$returnDate = 2016-10-20;
$diff = abs(strtotime($pickupDate) - strtotime($returnDate));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
赞赏任何输入
答案 0 :(得分:1)
首先,代码没有考虑闰年,不同月份的长度以及类似的事情。
在php中实际上有一个功能,请查看链接以获取详细信息:http://php.net/manual/en/datetime.diff.php,并获取示例:
$datetime1 = new DateTime('2016-10-13');
$datetime2 = new DateTime('2016-10-20');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%y years, %m months, %d days');
答案 1 :(得分:1)
试试这个,它会给你不同的日期,时间,分钟,小时,秒等等。
date_default_timezone_set('America/Los_Angeles');
$now = '2016-10-13';
$returnDate = '2016-10-20';
$start = date_create($returnDate);
$end = date_create($now);
$diff=date_diff($end,$start);
print_r($diff);
<强> DEMO 强>
答案 2 :(得分:1)
来自手册
$pickupDate = new DateTime('2016-10-13');
$returnDate = new DateTime('2016-10-20');
$interval = $pickupDate->diff($returnDate);
echo $interval->format('%R%a days');
答案 3 :(得分:1)
date_default_timezone_set('America/Los_Angeles');
$pickupDate = '2016-10-13';
$returnDate = '2016-10-20'; //use signle quote same as pickupDate
$diff = abs(strtotime($returnDate) - strtotime($pickupDate)); // change the order
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
由于
答案 4 :(得分:1)
只需将单引号放在返回日期,如$returnDate = '2016-10-20';
,您可以使用php的date_diff()
函数,
$daysdiffernce = date_diff(date_create('2016-10-13'),date_create('2016-10-20'));
echo $daysdiffernce->format("%R%a days");
这将给出+ 7天的答案