繁体   English   中英

PHP比较两个日期之间的差异

[英]php compare difference between two dates

我正在尝试返回两个日期之间的差额,我正在根据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); 

任何输入表示赞赏

首先,该代码未考虑leap年,不同长度的月份等。

实际上在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');

尝试此操作,它将为您提供日期,时间,分钟,小时,秒等不同的信息。

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);

演示

从手册

 $pickupDate = new DateTime('2016-10-13');
 $returnDate = new DateTime('2016-10-20');
 $interval = $pickupDate->diff($returnDate);
 echo $interval->format('%R%a days');

http://php.net/manual/en/datetime.diff.php

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); 

谢谢

只需在返回日期中加上单引号,例如$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天的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM