在 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.
本帖由系统于 5年前 自动加精
Image
Epona
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11
萧晔离

学习了

5年前 评论

学习了,正好需要。

5年前 评论

学到了 :see_no_evil:

5年前 评论

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

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

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

666,学到了

5年前 评论

感谢分享

5年前 评论
wuchenge

厉害了,

我的哥。

拿走了

5年前 评论

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

file

Laravel

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

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