2017-06-07 69 views
0

我想要獲取數據庫中每行的2個日期之間的所有日期的數組。例如2017-02-02和2017-02-03有3行,2017-02-18和2017-02-20有一排我想要輸出一個數組[2017-02-02, 2017-02-03,2017-02-18,2017-02-19,2017-02-20]從一個數組中的每一行獲取2個日期之間的所有日期的數組

到目前爲止,我有一個查詢獲取所有日期和echo的開始和結束日期以及腳本獲取日期在2個日期之間的數組。

我怎樣才能使它工作,因此它將每一行的所有日期變成一個數組?

<?php 
    $result = mysqli_query($con, "SELECT * FROM invoice_line WHERE car_car_id = $id"); 
    while ($auto = mysqli_fetch_array($result)) { 
    ?> 
      <h2 class="title_car"> 
      <?php echo $auto['start_date'] . ' - ' . $auto['end_date'];?> 
      </h2> 
     <hr> 
     <?php $dateRange = getDateRange($auto['start_date'], $auto['end_date']); ?> 
    <?php } ?> 

    <?php 
    function getDateRange($startDate, $endDate, $format="Y-m-d") 
{ 
    //Create output variable 
    $datesArray = array(); 
    //Calculate number of days in the range 
    $total_days = round(abs(strtotime($endDate) - strtotime($startDate))/86400, 0) + 1; 
    //Populate array of weekdays and counts 
    for($day=0; $day<$total_days; $day++) 
    { 
     $datesArray[] = date($format, strtotime("{$startDate} + {$day} days")); 
    } 
    //Return results array 
    return $datesArray; 
} 

print_r($dateRange); 
?> 
+0

你的函數'getDateRange()'工作。那麼,爲什麼不在while循環中調用該函數呢? –

+0

@NanaPartykar感謝回覆編輯的腳本調用循環內的函數,我期待獲得一個數組與數據庫的所有行的日期,但即時通訊只獲取最後一行的日期任何想法什麼即時做錯了? – marijn

+0

抱歉,對於遲到的回覆@marjin你做了正確的事情,只是錯過了每個循環打印。以下是我的答案。請讓我知道,如果我錯過了任何事情。 –

回答

1

你要的foreach每一個陣列打印的日期。

<?php 
$result = mysqli_query($con, "SELECT * FROM invoice_line WHERE car_car_id = $id"); 
while ($auto = mysqli_fetch_array($result)) {?> 
    <h2 class="title_car"> 
    <?php echo $auto['start_date'] . ' - ' . $auto['end_date'];?> 
    </h2> 
    <hr> 
    <?php 
    $date_text = ""; 
    $dateRange = getDateRange($auto['start_date'], $auto['end_date']); 
    if(!empty($dateRange)){ 
    foreach($dateRange as $dateR){ 
     $date_text .= $dateR.", "; 
    } 
    } 
    echo rtrim($date_text,", ")."<br>"; 
}?> 

輸出:

2011-05-03, 2011-05-04, 2011-05-05, 2011-05-06, 2011-05-07, 2011-05-08 

2011-05-20, 2011-05-21, 2011-05-22, 2011-05-23 

. 

. 
. 
+1

謝謝,我只需要讓他們在1陣列中,但我想我會得到它 – marijn

0

您可以使用DatePeriod類。

您的代碼將是這樣的:

<?php 
$rows = [ 
    [ new DateTime(), (new DateTime())->modify('+3 days') ], 
    [ (new DateTime())->modify('+20 days'), (new DateTime())->modify('+30 days') ], 
]; 

$dates = []; 

foreach ($rows as $row) { 
    $dateRange = new DatePeriod($row[0], new DateInterval('P1D'), $row[1]); 

    foreach ($dateRange as $date) { 
     $dates[] = $date; 
    } 
} 

var_dump($dates); 
相關問題