В итоге: я пытаюсь создать программу, которая будет уведомлять меня в день оплаты. У меня есть идея, как это сделать, но осталась одна проблема. Допустим, клиент открыл счет 31.01.17. Следующая дата должна быть 28.02.18 (месяц спустя). Мой код гласит, что если сегодняшний день меньше дня, когда была открыта политика, не считайте его как месяц (так как целый месяц не прошел), поэтому он не будет считаться как полный месяц, даже если он должен ,
Этот код у меня работает практически для всех дат, кроме последнего дня февраля, или если месяц заканчивается 30-го числа, а политика была открыта 31-го.
Заранее спасибо!
$today = time();
$policy_opened = strtotime($policy_opened);
//number of months the policy has been opened
$year_opened = date('Y',$policy_opened);
$year_now = date('Y',$today);
$month_opened = date('m',$policy_opened);
$month_now = date('m',$today);
$day_opened = date('d',$policy_opened );
$day_now = date('d',$today);
$months_since_opened = (($year_now - $year_opened) * 12) + ($month_now - $month_opened);
$months_since_opened = $months_since_opened + 1; //since it can't start with 0 months opened.
if($day_now < $day_opened){
//this is in order to count it as one month only if a 'whole month' has passed by.
$months_since_opened = $months_since_opened - 1;
}
Вы можете попробовать встроенную функцию Datetime для прямого вычисления или вычисления разности дней. Вот код для расчета месяца.
Это даст вам месяц разница от двух дат также
$policyOpen = "2017-12-01";
$toDay = "2017-12-31";
$smallDate = new DateTime($opened);
$bigDate = new DateTime($toDay);
$months_since_opened= $small->diff($big)->format("%m");you can also get diffrent date related parameter as shown below
echo $diff->y; //this will give you year diffrence
echo $diff->m; //this will give you month diffrence
echo $diff->d; //this will give you day diffrence
echo $diff->h; //this will give you hours diffrence
echo $diff->i; //this will give you minute diffrence
echo $diff->s; //this will give you second diffrence
Других решений пока нет …