Най-стабилният начин да направите това е да използвате 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;
}
Това инициализира вашия масив на нещо като:
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)
}
Сега имате масив с всички възможни дати през последните 7 дни и можете да направите това във вашия цикъл:
$display_date = date('M d', $sale['created']);
$sale_data[$display_date] += $sale['amt'];
Не е нужно да проверявате дали ключът на масива съществува, тъй като е гарантирано, че съществува.
И накрая, бих препоръчал да разгледате DATETIME
или други свързани типове колони за дата/час, тъй като те биха били по-полезни тук, отколкото съхраняването на UNIX времеви печати. Може да използвате MySQL функции за дата/час, за да изберете правилно редовете, които търсите, вместо да се налага да създавате времеви печат на UNIX всеки път, когато искате да правите заявка за данни въз основа на времето.