これを実行するための最も堅牢な方法は、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タイムスタンプを格納するよりもここで役立つため、その他の関連する日付/時刻列タイプ。時間に基づいてデータを照会するたびにUNIXタイムスタンプを作成する代わりに、MySQLの日付/時刻関数を使用して、探している行を適切に選択することができます。