2017-09-25 184 views
1

我想获得日期时间对象的数组,但失败悲惨。获取所有日期从过去30天(日期时间对象)

我想取今天的日期,并获取过去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

变化

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

$begin = new DateTime(); 
$begin->sub(new DateInterval('P30D')); 
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'); 
} 

将工作

+0

工作或者您可以'clone'它。 http://php.net/manual/en/language.oop5.cloning.php – Qirel

+0

是的我想通了这不工作..谢谢你甚至不知道克隆存在这样的PHP – MacBooc

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

相关问题