De meest robuuste manier om dit te doen, is door DateTime
te gebruiken in plaats van 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
Nu kunt u uw reeks datums als volgt vormen:
$sale_data = array();
foreach( $period as $day) {
$key = $day->format( 'M d');
$sale_data[ $key ] = 0;
}
Deze initialiseert je array naar iets als:
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)
}
Nu heb je een array met alle mogelijke datums in de afgelopen 7 dagen, en je kunt dit in je loop doen:
$display_date = date('M d', $sale['created']);
$sale_data[$display_date] += $sale['amt'];
U hoeft niet te controleren of de arraysleutel bestaat, omdat deze gegarandeerd bestaat.
Ten slotte raad ik aan om de DATETIME
. te bekijken of andere geassocieerde typen datum/tijd-kolommen, omdat ze hier nuttiger zijn dan het opslaan van UNIX-tijdstempels. U kunt MySQL-datum-/tijdfuncties gebruiken om de rijen die u zoekt correct te selecteren in plaats van dat u elke keer een UNIX-tijdstempel moet maken als u gegevens wilt opvragen op basis van tijd.