Мне нужно получить даты предстоящих 15 и 30 следующих месяцев, как на текущую дату. (Если февраль находится в радиусе действия, он должен быть 28/29, конечно).
Могу ли я сделать это, используя mktime / strtotime или, возможно, используя другой метод?
Я получил это, но, конечно, это только для получения последнего дня этого и следующего месяца. Мне нужны будущие 15 и 30-е годы.
$cuota1 = date('tm-Y', strtotime('+15 days')); return $cuota1; $cuota2 = date('tm-Y', strtotime('+30 days')); return $cuota2; $cuota3 = date('tm-Y', strtotime('+45 days')); return $cuota3;
Заранее спасибо.
Надеюсь, у меня есть идея, и может быть, это решение довольно длинное, но похоже, что это пуленепробиваемый:
$numOfDays = date('t', $todayStamp); $base = strtotime('+'.$numOfDays.' days', strtotime(date('Ym-01', $todayStamp))); $day15 = date('Ym-15', $base); $day30 = date('Ym-'.min(date('t', $base), 30), $base);
где $todayStamp
обычно является значением time()
, но для целей отладки это может быть strtotime()
произвольной даты. Например, возьмем «трудный» случай следующего високосного года:
$today = '2016-01-30'; $todayStamp = strtotime($today); $numOfDays = date('t', $todayStamp); $base = strtotime('+'.$numOfDays.' days', strtotime(date('Ym-01', $todayStamp))); $day15 = date('Ym-15', $base); $day30 = date('Ym-'.min(date('t', $base), 30), $base); var_dump($day15); var_dump($day30);
Выход
string(10) "2016-02-15" string(10) "2016-02-29"
и для 2016-02-29 выход будет
string(10) "2016-03-15" string(10) "2016-03-30"
Возможно, немного грубо, но вы можете попробовать что-то подобное, хотя, конечно, это не подтверждает дату вообще:
$m=date('m')+1; $y=date('Y'); $d=15; echo date( 'tm-Y', strtotime( "{$d}.{$m}.{$y}" ) ); # > outputs: 31-12-2015 $d=30; echo date( 'tm-Y', strtotime( "{$d}.{$m}.{$y}" ) ); # > outputs: 31-12-2015
$tstamp = strtotime('+1 month'); //add a month $m=date('m',$tstamp); //month value $y=date('Y'); //this year $date15 = date("Ymd", strtotime("$y-$m-"."15")); //15 th of next month $date31 = date("Ymt", strtotime("$y-$m-"."15")); //last date of next month
Это даст вам последнюю дату следующего месяца.