2017-09-25 179 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

相關問題