A maneira mais robusta de fazer isso é usar
DateTime
em vez de 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
Agora, você pode formar sua matriz de datas assim:
$sale_data = array();
foreach( $period as $day) {
$key = $day->format( 'M d');
$sale_data[ $key ] = 0;
}
Isso inicializa seu array para algo como:
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)
}
Agora você tem um array com todas as datas possíveis nos últimos 7 dias e pode fazer isso em seu loop:
$display_date = date('M d', $sale['created']);
$sale_data[$display_date] += $sale['amt'];
Você não precisa verificar se a chave de matriz existe, pois é garantido que ela exista.
Finalmente, eu recomendaria olhar para o
DATETIME
ou outros tipos de colunas de data/hora associados, pois seriam mais úteis aqui do que armazenar carimbos de data e hora do UNIX. Você pode estar usando funções de data/hora do MySQL para selecionar corretamente as linhas que você está procurando em vez de ter que criar um timestamp UNIX toda vez que você quiser consultar dados com base no tempo.