最近在工作中碰到了這樣一個需求,根據開始日期和結束日期生成一個按天計的陣列,雖然我們可以通過foreach
辦到,但是有沒有什麼更加優雅的方法呢?經過一番搜尋之後,找到了這樣的一個類——DatePeriod
。
DatePeriod
的簡介如下:
DatePeriod 類表示一個時間週期。
一個時間週期可以用來在給定的一段時間之內, 以一定的時間間隔進行迭代。
一般的使用方法
假設我們的開始日期為2020-03-01
,結束日期為2020-03-10
。那麼我們可以用下面的程式碼來生成一個時間週期
$period = new DatePeriod(
new DateTime('2020-03-01'),
new DateInterval('P1D'),
new DateTime('2020-03-11') //最後一天的日期不會被包含,所以要加1天
);
// 遍歷$perid即可獲得每天的日期
foreach ($period as $key => $value) {
$value->format('Y-m-d')
}
// 當然我們也可以
使用CarbonPeriod
在Laravel中預設引入了Carbon這個類,那麼我們可以使用CarbonPeriod
類來更加方便可讀的生成我們需要的內容。
use Carbon\CarbonPeriod;
$period = new CarbonPeriod('2020-03-01', '1 day', '2020-03-10');
foreach ($period as $key => $value) {
echo $value->format('Y-m-d').PHP_EOL;
}
當然,我們有另外的一種寫法
$period = Carbon::parse('2020-03-01')->daysUntil('2020-03-10');
其他的寫法我們可以在Carbon 的文件中找到。
PS:其實Carbon的寫法是我在寫這篇文章的時候才發現的?,於是明天把已經寫好的程式碼換成Carbon寫法。
本作品採用《CC 協議》,轉載必須註明作者和本文連結