Il modo più efficace per farlo è usare DateTime
invece di 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
Ora puoi formare la tua serie di date in questo modo:
$sale_data = array();
foreach( $period as $day) {
$key = $day->format( 'M d');
$sale_data[ $key ] = 0;
}
Questo inizializza il tuo array a qualcosa come:
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)
}
Ora hai un array con tutte le date possibili negli ultimi 7 giorni e puoi farlo nel tuo ciclo:
$display_date = date('M d', $sale['created']);
$sale_data[$display_date] += $sale['amt'];
Non è necessario verificare se la chiave dell'array esiste, poiché è garantita l'esistenza.
Infine, consiglierei di esaminare il DATETIME
o altri tipi di colonne di data/ora associati, in quanto sarebbero più utili qui rispetto alla memorizzazione di timestamp UNIX. Potresti utilizzare le funzioni di data/ora di MySQL per selezionare correttamente le righe che stai cercando invece di dover creare un timestamp UNIX ogni volta che desideri eseguire query sui dati in base all'ora.