Попробуй это. reday
- день пополнения (int - день месяца). Если меньше, чем сегодня, это даст reday
этого месяца, но не намного, чем нет дней этого месяца. Если больше, чем сегодня, укажите reday
следующего месяца в таком же состоянии. Я использую это для расчета «Следующего пополнения» ежемесячной точки пополнения. возврат dd/mm/yyyy
function nextrefill($reday) {
if (date("j") < $reday) {
$numd = date("t");
if ($reday > $numd) {
return str_pad($numd, 2, "0", STR_PAD_LEFT).date("/m/Y");
} else {
return str_pad($reday, 2, "0", STR_PAD_LEFT).date("/m/Y");
}
} else {
$nextm = date('m', strtotime('first day of next month'));
$nextmy = date('Y', strtotime('first day of next month'));
$numd = cal_days_in_month(CAL_GREGORIAN, $nextm, $nextmy);
if ($reday > $numd) {
return str_pad($numd, 2, "0", STR_PAD_LEFT)."/".$nextm."/".$nextmy;
} else {
return str_pad($reday, 2, "0", STR_PAD_LEFT)."/".$nextm."/".$nextmy;
}
}
}
для более прямого указания (Правка)
function nextmonthday($day) {
$next_month = date('m', strtotime('first day of next month'));
$year_of_next_month = date('Y', strtotime('first day of next month'));
$no_of_day_in_next_month = cal_days_in_month(CAL_GREGORIAN, $nextm, $nextmy);
if ($day > $no_of_day_in_next_month){
return str_pad($no_of_day_in_next_month, 2, "0", STR_PAD_LEFT)."/".$next_month."/".$year_of_next_month;
} else {
return str_pad($day, 2, "0", STR_PAD_LEFT)."/".$next_month."/".$year_of_next_month;
}
}