Öncelikle yanıt için teşekkür ederim. Carbon ile yapmayı denemiş ama başaramamıştım. Anlaşılan bilgi eksiğim var o konuda.
Ben şu aşağıdaki gibi yapmaya çalışıyorum, ama
ayın son günü seçilmesi durumunda ve
ayın son gününün de
tatillere denk gelmesi durumunda nasıl
ileri - geri hareket ettireceğimi bilemedim.
/**
*
* - İki tarih arasındaki tüm günleri al
* - Bu günlerden haftasonlarını günlerini çıkart
* - Tüm tatilleri çıkart
* - Geriye kalan günleri işle...
*
* - Başvuru tarihini al (Müşterinin sözleşme tarihi)
* - İlk taksit gününü belirle.
* - İlk taksit gününe, belirtilen vade(ay) sayısını ekle
*
* - Internal ile oluşturulan günleri dön.
* - Ayın son günü ise bir EKSİLT.
*
**/
$st = new \DateTime('2017-01-31');
$et = new \DateTime('2018-01-05');
$fark = $st->diff($et);
$gunluk = new \DateInterval('P1D');
$gunler = new \DatePeriod($st, $gunluk, $et);
$musaitGunler=[];
$tatiller = [
'2017-02-10', '2017-03-04','2017-03-01','2017-04-27','2017-06-27',
'2017-02-11', '2017-03-05','2017-03-02','2017-04-28','2017-06-28',
'2017-02-12', '2017-03-12','2017-03-30','2017-05-29','2017-06-29',
'2017-02-13', '2017-02-27','2017-03-31','2017-05-30','2017-06-30',
'2017-02-14', '2017-02-28','2017-04-01','2017-06-26',
];
foreach($gunler as $gun)
{
if( in_array($gun->format('Y-m-d'), $tatiller) )
{
// $x[] = "Tatil Günü: " . $gun->format('D - Y-m-d');
}
else if( in_array($gun->format('D'), ['Sat', 'Sun']) )
{
// $x[] = "Haftasonu: " . $gun->format('D - Y-m-d');
}
else
{
$musaitGunler[] = $gun;
}
}
$taksit = [];
$aylik = new \DatePeriod($musaitGunler[0], new \DateInterval('P1M'), $musaitGunler[count($musaitGunler)-1]);
foreach($aylik as $odeme)
{
$taksit[] = "Ödeme Günü: ". $odeme->format('d') .", ST: ". $st->format('m-d') .", Ödeme: ". $odeme->format('Y-m-d');
if($st->format('m-d') == $odeme->format('m-d'))
{
}
}
dd($taksit);
Yukarıdaki kodların sonuçları:
array:12 [▼
0 => "Ödeme Günü: 31, ST: 01-31, Ödeme: 2017-01-31"
1 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2017-03-03" // burada 2. ay es geçilmiş.
2 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2017-04-03"
3 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2017-05-03"
4 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2017-06-03"
5 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2017-07-03"
6 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2017-08-03"
7 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2017-09-03"
8 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2017-10-03"
9 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2017-11-03"
10 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2017-12-03"
11 => "Ödeme Günü: 03, ST: 01-31, Ödeme: 2018-01-03"
]