php在foreach中反转时间段的顺序

时间:2014-08-15 20:27:29

标签: php date foreach reverse dateinterval

嗨我有脚本给我一周之间的日期列表。 我需要反向订单。 alredy尝试了rsort,reverse_array,以及更多的一些错误。

感谢。

脚本

$date2 = "$lastweek2";
$date1 = "$lastweek1";

$start    = new DateTime($date2);
$end      = new DateTime($date1);
$interval = DateInterval::createFromDateString('1 day');
$period   = new DatePeriod($start, $interval, $end);

echo "<br>";
foreach ($period as $dt) {
    echo $dt->format("Y-m-d") . "<br>\n";
}
回声就像这样

2014-08-09
2014-08-10
2014-08-11
2014-08-12
2014-08-13
2014-08-14
2014-08-15

逆转

2014-08-15
2014-08-14
2014-08-13
2014-08-12
2014-08-11
2014-08-10
2014-08-09

4 个答案:

答案 0 :(得分:22)

$ period = array_reverse(iterator_to_array($ period));

答案 1 :(得分:8)

使用否定一天的时间间隔以及两个日期之间的天数差异,您可以完成相同的操作,而无需使用array_reverse(iterator_to_array())或构建其他数组。

示例:https://3v4l.org/B3nNk

$start = new \DateTime('2014-08-15');
$end = new \DateTime('2014-08-09');
$diff = $end->diff($start);
$interval = \DateInterval::createFromDateString('-1 day');

$period = new \DatePeriod($start, $interval, $diff->days);
foreach ($period as $date) {
    echo $date->format('Y-m-d') . PHP_EOL;
}

<强>结果:

2014-08-15
2014-08-14
2014-08-13
2014-08-12
2014-08-11
2014-08-10
2014-08-09

通过这种方式,它告诉DatePeriod减去1天,从diff返回的天数,而不是在结束日期之前累加。

答案 2 :(得分:5)

只需将日期放在数组中,然后使用array_reverse()

反转数组的顺序
$dates = array();
foreach ($period as $dt) {
    $dates[] = $dt->format("Y-m-d");
}

$dates = array_reverse($dates);
echo implode("<br>\n", $dates);

答案 3 :(得分:2)

$date1 = "2014-08-15";
$date2 = "2014-08-09";

$start    = new DateTime($date2);
$end      = new DateTime($date1);
$i = DateInterval::createFromDateString('1 day');
while ($end >= $start) {
  echo $end->format("Y-m-d") . "<br>\n";
  $end = $end->sub($i);
}