2012-06-25 74 views
4

可能重複:
Create an Array of the Last 30 Days Using PHP如何獲得最近7天內使用PHP

我試圖創建「最近7天銷售」的陣列,是當今加上6天以前。我使用到目前爲止:

$rightnow = time(); 
$time_window = $rightnow - (60*60*24*6); // 6 days ago + today = 7 days 

$tw_time = date('M d', $time_window); 
$tw_time = strtotime($tw_time); // 6 days ago starting at 00:00:00 

$valid_sales = mysql_query("SELECT amt, created FROM sales WHERE created > $tw_time"); 

$sale_data = array(); 

foreach ($valid_sales as $sale) { 

    $display_date = date('M d', $sale['created']); 

    if (array_key_exists($display_date,$sale_data)) { // If date is in array 

     $sale_data[$display_date] = $sale_data[$display_date] + $sale['amt']; // Add amount to date's sales 

    } else { // If date is not in array 

     $sale_data[$display_date] = $sale['amt']; // Create key with this amount 

    } 

} // End foreach valid_sales 

這將給我一個數組,其中的日期和價值是該日期的銷售量。即:

Array ([Jun 19] => 19.00 [Jun 20] => 52.50 [Jun 22] => 2.00) 

我遇到的問題是,我需要每天補充到,即使存在沒有銷售的那一天(無結果發現與MySQL查詢)的陣列。所以,我特林得到一個數組是這樣的:

Array ([Jun 19] => 19.00 [Jun 20] => 52.50 [Jun 21] => 0.00 [Jun 22] => 2.00 [Jun 23] => 0.00 [Jun 24] => 0.00 [Jun 25] => 0.00) 

這樣一來,每天都過去7天的陣中,即使日期沒有出現在MySQL查詢。

有關如何做到這一點的任何建議?

+0

您是否正在使用mysql數據庫中的unixtimetamps? O_o –

回答

7

最可靠的方法去了解這是使用DateTime而不是strtotime

$now = new DateTime("7 days ago", new DateTimeZone('America/New_York')); 
$interval = new DateInterval('P1D'); // 1 Day interval 
$period = new DatePeriod($now, $interval, 7); // 7 Days 

現在,你可以形成你的日期陣列像這樣:

$sale_data = array(); 
foreach($period as $day) { 
    $key = $day->format('M d'); 
    $sale_data[ $key ] = 0; 
} 

initializes your array的東西如:

array(8) { 
["Jun 18"]=>  int(0) 
    ["Jun 19"]=>  int(0) 
    ["Jun 20"]=>  int(0) 
    ["Jun 21"]=>  int(0) 
    ["Jun 22"]=>  int(0) 
    ["Jun 23"]=>  int(0) 
    ["Jun 24"]=>  int(0) 
    ["Jun 25"]=>  int(0) 
} 

現在你有一個arra y隨所有在過去7天的可能日期,你可以在你的循環做到這一點:

$display_date = date('M d', $sale['created']); 
$sale_data[$display_date] += $sale['amt']; 

你並不需要檢查,如果數組鍵存在,因爲它是保證存在。

最後,我建議您查看DATETIME或其他關聯的日期/時間列類型,因爲它們在這裏比存儲UNIX時間戳更有用。您可以使用MySQL日期/時間函數來正確選擇要查找的行,而無需在每次想要基於時間查詢數據時創建UNIX時間戳。

+2

'新的DateTime('7天前');'也可以做的。 –

+2

+1推薦'DateTime'。我看到waaay使用'strtotime'的答案太多了。 DateTime是面向對象的,除非你使用PHP <5.2.0,否則再也不會使用舊的日期/時間函數了。恕我直言 – Herbert