• ベストアンサー

UNIX時間で今月1日~末日を取得するには・・・

PHP4.x.xです。 初心者です。 ショッピングカートの注文データを閲覧するページで 「今月一ヶ月間の売り上げ」という表示の仕方をしたいです。 売り上げテーブルのorder_dateというフィールドに注文された日時がUNIX時間(エポック秒)で入っています。 人力で2009年11月1日0時の数値を求め、2009年11月30日11時59分59秒の数値を求め、select * order where order_date >******* and order_data <****** とすることは簡単なのですが・・・あまりにも美しくない、かつ何年後までやるねん・・・と面倒くさい。 何かいい方法でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kyo999
  • ベストアンサー率64% (34/53)
回答No.3

質問内容から察するに、月初め(2009年11月1日0時0分0秒)と月末日(2009年11月30日11時59分59秒)をいちいち人力で求めたくないということですか? (年・月を入力したくない。月の最終日をわざわざ調べて入力したくない) 年・月を入力せず、今月のみでよいのなら下記のようなのはどうでしょう? 月の末日($ed)は翌月の0日で求められました。(越年も対応:2010/1/0=>2009/12/31) -------------- ↓ここから↓ ---------------- <?php $year = date('Y', time()); $month = date('n', time()); $st = mktime( 0, 0, 0, $month, 1, $year); $ed = mktime(23, 59, 59, $month+1, 0, $year); // 翌月0日=当月最終日 $sql = "select * order where order_date >={$st} and order_data <={$ed}"; echo("sql:".$sql."<br>\n"); // 以下は確認用 echo("st:".$st."<br>\n"); echo("ed:".$ed."<br>\n"); $st_stm = date("Y / m / d H:i:s", $st); $ed_stm = date("Y / m / d H:i:s", $ed); echo("st_stm:".$st_stm."<br>\n"); echo("ed_stm:".$ed_stm."<br>\n"); ?> -------------- ↑ここまで↑ ---------------- (確認テストなど)任意の年・月で行ないたいなら $year = $_GET['y']; $month = $_GET['m']; などを使って下さい。(要バリデーション)

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

SQLの特徴として、BETWEENを使った方が効率的なヒットをするようです。

すると、全ての回答が全文表示されます。
回答No.1

UNIX_TIMESTAMP関数を利用して以下のようなSQL文ではどうでしょうか? SELECT * FROM `order` WHERE `order_date` >= UNIX_TIMESTAMP('2009-11-1 00:00:00') AND `order_date` <= UNIX_TIMESTAMP('2009-11-30 23:59:59'); また2009年11月は2009年11月1日0時0分0秒『以上』で2009年12月1日0時0分0秒『より小さい』範囲ですから不等号をきちんと使い分けて以下のようにした方が楽だとおもいます。末日を計算する手間が省けますから。 SELECT * FROM `order` WHERE `order_date` >= UNIX_TIMESTAMP('2009-11-1 00:00:00') AND `order_date` < UNIX_TIMESTAMP('2009-12-1 00:00:00');

すると、全ての回答が全文表示されます。

関連するQ&A