2016-02-03 37 views
0

我想從開始到結束日期創建一個DateTime變量數組。我正在使用以下函數來創建值的數組。PHP - 處理DateTime變量並創建一個範圍

<?php 
class utility 
{ 

    // constructor 
    function __construct() 
    { 

    } 

    /* Creates an array of dates in YYYY-MM-DD format 
    * INPUT: 
    *   @ From 
    *   @ To 
    * OUTPUT: 
    *   @ ArrayOfDates 
    */ 

    function createDateRangeArray($strDateFrom,$strDateTo) 
    { 
     $aryRange = array(); 

     $iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),  substr($strDateFrom,8,2),substr($strDateFrom,0,4)); 
     $iDateTo=mktime(1,0,0,substr($strDateTo,5,2),  substr($strDateTo,8,2),substr($strDateTo,0,4)); 

     if ($iDateTo>=$iDateFrom) 
     { 
      array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry 
      while ($iDateFrom<$iDateTo) 
      { 
       $iDateFrom+=86400; // add 24 hours 
       array_push($aryRange,date('Y-m-d',$iDateFrom)); 
      } 
     } 
     return $aryRange; 
    } 
    }?> 

當我問的陣列從2016年1月1日到2016年1月6日所得陣列是正確的:

From: 2016-01-01 
To: 2016-01-06 
Number of dates: 6 
2016-01-01,2016-01-02 
2016-01-02,2016-01-03 
2016-01-03,2016-01-04 
2016-01-04,2016-01-05 
2016-01-05,2016-01-06 

問題:

如果該週期是從2016-01-06到2016-01-09這個數組是完全錯誤的。

From: 2016-01-06 
To: 2015-12-31 
Number of dates: 0 

我在想什麼?

支持

您可以用下面的代碼測試功能。

<?php 
    require_once 'utility.php'; 
    $utility = new utility(); 

    $yearFrom = 2016; $monthFrom = 01; $dayFrom = 06; 
    $yearTo = 2016; $monthTo = 01; $dayTo = 09; 

    $from = new DateTime($yearFrom.'-'.$monthFrom.'-'.$dayFrom); 
    echo "<div>From: <b>". $from->format('Y-m-d') . "</b> </div>"; 
    $to = new DateTime($yearTo.'-'.$monthTo.'-'.$dayTo); 
    echo "<div>To: <b>" . $to->format('Y-m-d') . "</b> </div>"; 

    $arrayDate = $utility->createDateRangeArray($from->format('Y-m-d'),$to->format('Y-m-d')); 

    echo "<div> Number of dates: " . count($arrayDate) . " </div>" ; 

    for ($i = 0; $i < count($arrayDate)-1 ; $i++) 
    { 
     echo "<div> " . $arrayDate[$i] . "," . $arrayDate[$i+1] . " </div>"; 
    } 

?> 

編輯

我注意到,如果有一天數爲9,而不是09它的工作原理...

+1

你可能想看看PHP的聯賽[期](HTTP://時期。 thephpleague.com/)包。它是專爲處理PHP中的時間範圍而創建的。 –

+0

很好@BenHarold!我一定會嘗試這個圖書館。 – UserK

回答

1

它看起來像你正在運行到一個類型轉換的問題當您首次實例化DataTime對象時,如在日期不正確的To的輸出中看到的那樣:

From: 2016-01-06 
To: 2015-12-31 
Number of dates: 0 

指定從和變量作爲字符串明確正確實例​​化DateTime是否:

$yearFrom = '2016'; $monthFrom = '01'; $dayFrom = '06'; 
    $yearTo = '2016'; $monthTo = '01'; $dayTo = '09'; 

輸出:

From: 2016-01-06 
To: 2016-01-09 
Number of dates: 4 
2016-01-06,2016-01-07 
2016-01-07,2016-01-08 
2016-01-08,2016-01-09 
+0

謝謝@Stiliyan,它的工作! – UserK

+0

沒問題 - 很高興我能幫到你。 – Stiliyan