获取过去30天内的所有日期(日期时间对象)

时间:2017-09-25 16:07:12

标签: php datetime

我正在尝试获取一组日期时间对象但却失败了。

我想今天约会,并在过去30天内获取所有日期。

$today = new DateTime();
$begin = $today->sub(new DateInterval('P30D'));

$interval = new DateInterval('P1D'); // 1 Day
$dateRange = new DatePeriod($begin, $interval, $today);

$range = [];
foreach ($dateRange as $date) {
    $range[] = $date->format('Y-m-d');
}

当我转出$range时,我得到一个空数组。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

更改

$begin = $today->sub(new DateInterval('P30D'));

$begin = new DateTime();
$begin->sub(new DateInterval('P30D'));

答案 1 :(得分:1)

您覆盖$today,因此$today$begin完全相同

$today =  new DateTime();
$copy = clone $today;
$begin = $copy->sub(new DateInterval('P30D'));

$interval = new DateInterval('P1D'); // 1 Day
$dateRange = new DatePeriod($begin, $interval, $today);

$range = [];
foreach ($dateRange as $date) {
    $range[] = $date->format('Y-m-d');
}

将起作用

答案 2 :(得分:1)

“sub”方法修改源对象,并输出对象本身作为返回值(实际上这是用于方法链接)。它不仅仅使用新日期创建新对象。

$begin = $today->sub(new DateInterval('P30D'));

修改$today并输出您随后声明为$begin的副本。这导致两个对象具有相同的日期,因此没有时间间隔可以迭代。

请参阅http://php.net/manual/en/datetime.sub.php

您需要为结束日期创建单独的对象:

$begin = new DateTime();
$begin->sub(new DateInterval('P30D'));
$end = new DateTime();

$interval = new DateInterval('P1D'); // 1 Day
$dateRange = new DatePeriod($begin, $interval, $end);

$range = [];
foreach ($dateRange as $date) {
    $range[] = $date->format('Y-m-d');
}
var_dump($range);

https://eval.in/867948

工作