php обратный порядок периода времени в foreach
привет у меня есть скрипт дает мне список дней дата между неделю. мне нужен обратный порядок. 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 ответов
просто поместите даты в массив, а затем измените порядок массива с помощью array_reverse()
$dates = array();
foreach ($period as $dt) {
$dates[] = $dt->format("Y-m-d");
}
$dates = array_reverse($dates);
echo implode("<br>\n", $dates);
С помощью отрицательный один день интервал и разница дней между двумя датами вы можете сделать то же самое без необходимости использовать 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, вместо сложения до даты окончания.
$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);
}