Разница между двумя датами в php с использованием високосного года - PullRequest
0 голосов
/ 25 мая 2019

Эй, я пытаюсь получить общее количество месяцев из двух дат в php. Я искал расчеты високосного года между двумя датами повсюду в Интернете, но не нашел ответа.

Если мой ввод от «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 голосов
/ 25 мая 2019

Я понимаю вашу проблему. На самом деле результат, который вы получаете, является правильным, потому что день заканчивается ночью 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

ВыМожно попробовать. Надеюсь, это поможет.

0 голосов
/ 25 мая 2019

Вы можете попробовать следующее:

$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

0 голосов
/ 25 мая 2019

Вы должны добавить дополнительный месяц в переменную $ 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

ИЛИ

$date1 = date_create('2019-01-01');
$date2 date_create('2019-03-31');
$interval= date_diff($date1, $date1);
echo $interval->format('%m months');
0 голосов
/ 25 мая 2019

Ваша математика вычисляет количество месяцев между двумя датами, исключая последний месяц.

Добавьте 1 к итогу, вот так.

 $months = (floor(($diff - $years * 365*60*60*24) 
                           / (30*60*60*24))) +1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...