2017-08-21 13 views
3

私は過去の特定の日付以降、毎週月曜日と火曜日とすべての月の最後の日曜日をCarbonで取得しようとしています。 それから私は、日の配列をループして、その日に偶数を作成したいと思います。私はそれを行う方法を理解しようとしていますか?一ヶ月に特有のすべての日の取得

// Get all dates of Mondays, Tuesdays, last Sundays of every Month since the first Monday of January of 2000. 
$eventDates = Carbon::parse('first Monday of January 2000'); 

$i = 0; 
while($eventDates->lt(Carbon::now()->subDay(14))) { 

    $event = factory(Event::class)->create([ 
     'date' => $eventDate, 
    ]); 
} 

答えて

2

私はカーボンをよく知っているわけではありません。ここでは、2000年以降毎週月曜日、火曜日、最後の日曜日の3つの配列を取得します。DatePeriodを繰り返し処理したり、間隔をマージして大きなイベントを作成したりすることができます。DatePeriod

<?php 
use Carbon\Carbon; 
use Carbon\CarbonInterval; 
$monday = Carbon::parse('First Monday of January 2000'); 
$tuesday = Carbon::parse('First Tuesday of January 2000'); 
$sunday = Carbon::parse('Last Sunday of January 2000'); 
$now = Carbon::now(); 
$mondays = new DatePeriod(
    $monday, 
    CarbonInterval::week(), 
    $now 
); 
$tuesdays = new DatePeriod(
    $tuesday, 
    CarbonInterval::week(), 
    $now 
); 
$sundays = new DatePeriod(
    $sunday, 
    CarbonInterval::week(4), 
    $now 
); 

$allDays = []; 
foreach ($mondays as $day) { 
    $allDays[] = $day; 
} 
foreach ($tuesdays as $day) { 
    $allDays[] = $day; 
} 
foreach ($sundays as $day) { 
    $allDays[] = $day; 
} 
usort($allDays, function ($a, $b) { 
    return strtotime($a) - strtotime($b); 
}); 
foreach ($allDays as $day) { 
    echo $day->format("M D Y-m-d")."<br>"; 
} 
+0

私はコレクションメソッドを使用しようとしましたが、何らかの理由でマージしていません。私は1つのメイン配列にすべてをマージしようとしていましたが、日付で並べ替えます。 – user3732216

+0

投稿を編集しました。それは以前よりも醜いですが、今ではすべてを1つの配列に並べ替えています。 – ishegg

関連する問題