在 PHP 中生成日期数组

最近在工作中碰到了这样一个需求,根据开始日期和结束日期生成一个按天计的数组,虽然我们可以通过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写法。

php
本作品采用《CC 协议》,转载必须注明作者和本文链接
There's nothing wrong with having a little fun.
本帖由系统于 4年前 自动加精
Epona
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 11
萧晔离

学习了

4年前 评论

学习了,正好需要。

4年前 评论

学到了 :see_no_evil:

4年前 评论

Crontab 的方法不错, 学习到了,我们 es 都是按天生成索引的,刚好也有这个需求。

这是自己封装实现的,感觉也比较简洁哈哈

 while (date("Ymd", $start) <= date("Ymd", $end)) {
     $index[] = date($format, $start);
     $start = strtotime('+1 day', $start);
 }
4年前 评论
Epona (楼主) 4年前

666,学到了

4年前 评论

感谢分享

3年前 评论
wuchenge

厉害了,

我的哥。

拿走了

3年前 评论

format之后是需要单独存储到新的array吗,为什么我format之后格式还是没变呢

file

Laravel

3年前 评论
Epona (楼主) 3年前
osang (作者) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!