sql >> データベース >  >> RDS >> Mysql

PHPを使用して過去7日間を取得する方法

    これを実行するための最も堅牢な方法は、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の日付/時刻関数を使用して、探している行を適切に選択することができます。




    1. サブクエリのパフォーマンスが低いPostgreSQLIN演算子

    2. MariaDBの日時値から分を減算する方法

    3. PHP7のPDOextは、結果セット全体をメモリに読み込みますか?

    4. MySQLでスラッシュ(\)を検索する方法は?そして、なぜエスケープ(\)は、where(=)ではなく、Likeが必要なのですか?