具有2个日期(从,到),例如10/1/2019和21/2/2019,如何编写一个循环来打印2月21日至1月10日的每个日期倒序?
很抱歉这个愚蠢的问题,但无法解决!
答案 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');
}
如果要在日期之间进行另一种选择,只需更改日期并将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));
我使用strtotime
函数将日期转换为毫秒。
然后从那里开始每天使用范围功能(24 * 60 * 60
)
这是在数组中映射并将其转换为日期格式的一种简单情况(我使用了d-M-Y
,但有more here)。