Revese循环在PHP中的日期

时间:2019-02-21 07:42:32

标签: php date

具有2个日期(从,到),例如10/1/2019和21/2/2019,如何编写一个循环来打印2月21日至1月10日的每个日期倒序?

很抱歉这个愚蠢的问题,但无法解决!

3 个答案:

答案 0 :(得分:3)

只需循环DateTime对象,并使用while循环将其输出。

$dt1 = new DateTime('2019-01-28');
$dt2 = new DateTime('2018-10-17');

while($dt1 >= $dt2) {
    echo $dt1->format('Y-m-d') . "\r\n";

    $dt1->modify('-1 day');
}

工作示例:https://3v4l.org/aJ17p

如果要在日期之间进行另一种选择,只需更改日期并将modify调用更改为+1 day

答案 1 :(得分:3)

您也可以使用DatePeriod

$period = new DatePeriod(
     new DateTime("10-1-2019"),
     new DateInterval('P1D'),
     new DateTime("21-2-2019")
);
$res = [];
foreach ($period as $key => $value) { // swap the order of the dates
    array_unshift($res,$value->format('Y-m-d'));
}

答案 2 :(得分:0)

这是另一种选择。
我建议您像其他答案一样,实际使用日期库-我只是想为问题添加一种不同的方法。

$start = '10-01-2019';
$end = '21-02-2019';

// This is to progress the range through each day.
// 24 days, 60 minutes, 60 seconds
$step = 24 * 60 * 60;

$days = array_map(function ($day) {
    return date('d-M-Y', $day);
}, range(strtotime($end), strtotime($start), -$step));

https://3v4l.org/S3AK5

我使用strtotime函数将日期转换为毫秒。
然后从那里开始每天使用范围功能(24 * 60 * 60

这是在数组中映射并将其转换为日期格式的一种简单情况(我使用了d-M-Y,但有more here)。