嘿,我试图从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);
我要去哪里错了
答案 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
您可以尝试。希望对您有所帮助。