Создайте список последовательных ежемесячных дат в PHP с учетом начальной даты и количества

Я работаю над небольшой системой платежей и должен составить список дней платежей (ежемесячно) с учетом начальной даты и количества платежей. Так, например:

Дано:

день начала: 2015/06/22
кол-во: 6

Я должен получить день от начальной даты (22) и сгенерировать список из 6 последовательных ежемесячных дат:

  • 2015/06/22 (если должна быть указана начальная дата и> чем сегодня)
  • 2015/07/22
  • 2015/08/24
  • 2015/09/22
  • 2015/10/22
  • 2015/11/23

Как видите, сгенерированные даты не должны быть выходными (суббота / день) и, если возможно, ни праздничными днями.

Есть ли какая-нибудь функция, которая может помочь мне достичь этого? ТИА

1

Решение

Я думаю, что это может делать то, что вы хотите, в том числе праздники

<?php

$startday = strtotime("2015/08/24");
$qtty = 5;

// Add as many holidays as desired.
$holidays = array();
$holidays[] = "4 Jul";
$holidays[] = "25 Dec";


for( $i = 0; $i < $qtty; $i++ ) {
$next_month = strtotime("+".$i." month", $startday); // Also works with "+ 30 days"while( in_array(date("d M", $next_month), $holidays)) { // Is holiday
$next_month = strtotime("+ 1 day", $next_month);

if( date("N", $next_month) > 5 ) { // Is weekend
$next_month = strtotime("next Monday", $next_month); // or "previous Friday"}
}
echo(date( "Y-m-d", $next_month) . '</br>');
}

?>

Будет эхом

2015-08-25
2015-09-25
2015-10-26 // Because of weekend
2015-11-25
2015-12-28 // Because of Christmas and weekend

И с датой начала 2015/10/31 результат будет:

2015-11-02 // Because of weekend
2015-12-01 // Because the 31st of Nov is the 1st of Dec
2015-12-31
2016-02-01 // Because the weekend
2016-03-02 // Because the 31st of Feb is the 2st of Mars (as 2016 is leep year)

В качестве хороших дополнительных советов, в зависимости от того, как вы хотите решить проблему 31 января, если вы хотите, чтобы последний день каждого месяца, вы всегда можете использовать следующее:

$first_of_the_month = strtotime(date("Y-m-1", $startday));
$next_month = strtotime("+ 1 month", $first_of_the_month);
$last_of_the_month = date("Y-m-t", $next_month);
echo($last_of_the_month); // 2015-09-30
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]