php中使用two年的两个日期之间的差异

时间:2019-05-25 06:58:45

标签: php datetime

嘿,我试图从php中的两个日期获取总计月份。我已经在互联网上到处搜索了两个日期之间的leap年计算,但没有找到答案。

如果我输入的是“ 2019-01-01”到“ 2019-03-31”,那么我预期的结果是3个月,但我得到的结果是2个月。

以下是我的代码。

 $date1 = strtotime("2019-01-01");  
 $date2 = strtotime("2019-02-28");  

 $diff = abs($date2 - $date1);  
 $years = floor($diff / (365*60*60*24));  
 $months = floor(($diff - $years * 365*60*60*24) 
                           / (30*60*60*24));  

 printf("%d months",$months);  

我要去哪里错了

4 个答案:

答案 0 :(得分:0)

您的数学将计算两个日期之间的月数,不包括结束月份。

将总数加1,就像这样。

 $months = (floor(($diff - $years * 365*60*60*24) 
                           / (30*60*60*24))) +1;

答案 1 :(得分:0)

您可以尝试以下操作:

$date1 = "2019-01-01";  
$date2 = "2019-02-28";  

$timestamp1 = strtotime($date1);
$timestamp2 = strtotime($date2);

$year1 = date('Y', $timestamp1);
$year2 = date('Y', $timestamp2);

$month1 = date('m', $timestamp1);
$month2 = date('m', $timestamp2);

$diff = (($year2 - $year1) * 12) + ($month2 - $month1); 

printf("%d months",$diff); 

在这里尝试:http://sandbox.onlinephpfunctions.com/code/496a08612489977e9e23e8ef3ea07ba991bc5e23

答案 2 :(得分:0)

您必须在$ month变量中添加额外的月份

 $date1 = strtotime("2019-01-01");  
 $date2 = strtotime("2019-03-31");  

 $diff = abs($date2 - $date1);  
 $years = floor($diff / (365*60*60*24));  
 $months = floor(($diff - $years * 365*60*60*24) 
                           / (30*60*60*24)) +1 ;  

 printf("%d months",$months); //Output : give add one extra

OR

$date1 = date_create('2019-01-01');
$date2 date_create('2019-03-31');
$interval= date_diff($date1, $date1);
echo $interval->format('%m months');

答案 3 :(得分:0)

我了解您的问题。 实际上,您得到的结果是正确的,因为白天在晚上12点结束,并且您在白天进行检查。因此,直到白天结束,您都无法获得完整的月份。如果添加一天并检查,您将正确获得3个月

下面我对您的代码进行了一些更改。.

$new_date = date('Y-m-d', strtotime('2019-02-28' . ' +1 day'));
$date1 = strtotime("2019-01-01");  
$date2 = strtotime($new_date);  

$diff = abs($date2 - $date1);  
$years = floor($diff / (365*60*60*24));  
$months = floor(($diff - $years * 365*60*60*24) 
                       / (30*60*60*24));  

printf("%d months",$months);  

您也可以通过Mysql查询到服务器来获取它

SELECT TIMESTAMPDIFF(MONTH, '2019-01-01', (SELECT DATE_ADD('2019-02-28', INTERVAL 1 DAY))) as month

您可以尝试。希望对您有所帮助。