Cách mạnh mẽ nhất để thực hiện điều này là sử dụng DateTime
thay vì 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
Bây giờ, bạn có thể tạo mảng ngày tháng của mình như sau:
$sale_data = array();
foreach( $period as $day) {
$key = $day->format( 'M d');
$sale_data[ $key ] = 0;
}
này sẽ khởi chạy mảng của bạn đến một cái gì đó như:
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)
}
Bây giờ bạn có một mảng với tất cả các ngày có thể có trong 7 ngày qua và bạn có thể thực hiện điều này trong vòng lặp của mình:
$display_date = date('M d', $sale['created']);
$sale_data[$display_date] += $sale['amt'];
Bạn không cần kiểm tra xem khóa mảng có tồn tại hay không, vì nó được đảm bảo là tồn tại.
Cuối cùng, tôi khuyên bạn nên xem xét DATETIME
hoặc các loại cột ngày / giờ liên quan khác, vì chúng sẽ được sử dụng nhiều hơn ở đây hơn là lưu trữ dấu thời gian UNIX. Bạn có thể sử dụng các hàm ngày / giờ của MySQL để chọn đúng các hàng bạn đang tìm kiếm thay vì phải tạo dấu thời gian UNIX mỗi khi bạn muốn truy vấn dữ liệu dựa trên thời gian.