sql >> Database teknologi >  >> RDS >> Mysql

Sådan får du de sidste 7 dage ved hjælp af PHP

Den mest robuste måde at gøre dette på er at bruge DateTime i stedet for 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 kan du danne dit udvalg af datoer som sådan:

$sale_data = array();
foreach( $period as $day) {
    $key = $day->format( 'M d');
    $sale_data[ $key ] = 0;
}

Denne initialiserer dit array til noget som:

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 har du et array med alle de mulige datoer i de seneste 7 dage, og du kan gøre dette i din loop:

$display_date = date('M d', $sale['created']);
$sale_data[$display_date] += $sale['amt'];

Du behøver ikke kontrollere, om array-nøglen findes, da den med garanti eksisterer.

Til sidst vil jeg anbefale at se på DATETIME eller andre tilknyttede dato-/tidskolonnetyper, da de ville være mere nyttige her end at gemme UNIX-tidsstempler. Du bruger muligvis MySQL dato/tidsfunktioner til korrekt at vælge de rækker, du leder efter, i stedet for at skulle oprette et UNIX-tidsstempel, hver gang du vil forespørge efter data baseret på tid.




  1. Skal jeg oprette en klasse, der arver SQLiteOpenHelper for hver tabel i min database?

  2. Den nemmeste metode til at teste en Oracle Stored Procedure

  3. mysql kopiere kolonnedatatypen til en anden tabel

  4. MYSQL group_concat tilsvarende i Sybase ASE?