Чтобы найти последний день месяца, вы можете использовать t
в качестве параметра формата, предоставленного функции date()
. Чтобы найти 15-е число месяца, с помощью mktime
сгенерируйте время и конвертируйте в дату с требуемым выходным форматом.
<code>/* Initial date and duration of processing */
$start = '2019-01-21';
$months = 4;
/* reduce start date to it's constituent parts */
$year = date('Y',strtotime($start));
$month = date('m',strtotime($start));
$day = date('d',strtotime($start));
/* store results */
$output=array();
for( $i=0; $i < $months; $i++ ){
/* Get the 15th of the month */
$output[]=date('Y-m-d', mktime( 0, 0, 0, $month + $i, 15, $year ) );
/* Get the last day of the calendar month */
$output[]=date('Y-m-t', mktime( 0, 0, 0, $month + $i, 1, $year ) );
}
/* use the results somehow... */
printf('<pre>%s
», print_r ($ выход, правда));
Выходы:
Array
(
[0] => 2019-01-15
[1] => 2019-01-31
[2] => 2019-02-15
[3] => 2019-02-28
[4] => 2019-03-15
[5] => 2019-03-31
[6] => 2019-04-15
[7] => 2019-04-30
)
Если, как следует из приведенного ниже комментария, вы бы предпочли, чтобы даты начинались с конца месяца, а не 15-го числа месяца, просто измените порядок в цикле добавления вычисляемых дат в выходной массив ...
for( $i=0; $i < $months; $i++ ){
/* Get the last day of the calendar month */
$output[]=date('Y-m-t', mktime( 0, 0, 0, $month + $i, 1, $year ) );
/* Get the 15th of the month */
$output[]=date('Y-m-d', mktime( 0, 0, 0, $month + $i, 15, $year ) );
}
выход:
Array
(
[0] => 2019-01-31
[1] => 2019-01-15
[2] => 2019-02-28
[3] => 2019-02-15
[4] => 2019-03-31
[5] => 2019-03-15
[6] => 2019-04-30
[7] => 2019-04-15
)
Для вывода результатов в точном формате результатов примера
$format=(object)array(
'last' => 't-M-y',
'15th' => 'd-M-y'
);
for( $i=0; $i < $months; $i++ ){
/* Get the last day of the calendar month */
$output[]=date( $format->{'last'}, mktime( 0, 0, 0, $month + $i, 1, $year ) );
/* Get the 15th of the month */
$output[]=date( $format->{'15th'}, mktime( 0, 0, 0, $month + $i, 15, $year ) );
}
выход: * * тысяча двадцать-один
Array
(
[0] => 31-Jan-19
[1] => 15-Jan-19
[2] => 28-Feb-19
[3] => 15-Feb-19
[4] => 31-Mar-19
[5] => 15-Mar-19
[6] => 30-Apr-19
[7] => 15-Apr-19
)