Таким образом, период оплаты 20 числа каждого месяца.как я могу получить дату последнего периода оплаты?Например:
today: is 05/12 -> returns 04/20 today: is 05/20 -> returns 04/20 today: is 05/25 -> returns 05/20
как я могу это сделать в PHP?
Я понял это с помощью простого:
$dayNow = date('d'); if($dayNow <= '20') { $previousDate = strtotime($dateNow.' -1 month'); $date = date('Y-m', $previousDate); } else { $date = date('Y-m'); }
Если вам когда-либо понадобится сделать что-то вроде «31-й или последний» или «2-й понедельник», я бы порекомендовал использовать библиотеку rrule, например:
https://packagist.org/packages/rlanvin/php-rrule
Возможно, есть более элегантный способ, но это работает (многословно для ясности):
function lastPayDate($todayDayNum) { $month = $todayDayNum > 20 ? 'this month' : 'last month'; return (new \DateTimeImmutable('first day of ' . $month)) ->add(new \DateInterval('P19D')); } echo lastPayDate(date('d'))->format('m/d/Y');