在 PHP 中生成日期陣列

Epona發表於2020-03-12

最近在工作中碰到了這樣一個需求,根據開始日期和結束日期生成一個按天計的陣列,雖然我們可以通過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 協議》,轉載必須註明作者和本文連結

There's nothing wrong with having a little fun.

相關文章