web-dev-qa-db-ja.com

先月の最初と最後の日を取得する最良の方法は?

先月の最初と最後の日を取得するための最良の方法を探しています。 SQLクエリを作成して先月の統計を取得するために使用します。

私はこれが最良の方法であり、より最適化されているが、より包括的ではないと思います、誰も同じことをする別の方法がありますか?

    $month_ini = date("Y-m-d", mktime(0, 0, 0, date("m", strtotime("-1 month")), 1, date("Y", strtotime("-1 month"))));

    $month_end = date("Y-m-d", mktime(0, 0, 0, date("m", strtotime("-1 month")), date("t", strtotime("-1 month")), date("Y", strtotime("-1 month"))));

ありがとう!!

43
aaronroman

PHP 5.3では、DateTimeクラスを使用できます。

<?php

$month_ini = new DateTime("first day of last month");
$month_end = new DateTime("last day of last month");

echo $month_ini->format('Y-m-d'); // 2012-02-01
echo $month_end->format('Y-m-d'); // 2012-02-29
118
Phen

前月の最終日:

date("Y-m-d", mktime(0, 0, 0, date("m"), 0));

前月の最初の日:

date("Y-m-d", mktime(0, 0, 0, date("m")-1, 1));
59
user1064130

私はこれらをMySQLで使用し、PHPスクリプト、短くシンプル:

echo date('Y-m-d', strtotime('first day of last month'));
echo date('Y-m-d', strtotime('last day of last month'));

MySQLの使用例:

$query = $db->query("SELECT * FROM mytable WHERE 1 AND mydate >= '".date('Y-m-d', strtotime('first day of last month'))."'");
5
Tarik

MySQLクエリの目的でこれを実行している場合、 MONTH関数 の使用を検討しましたか?.

SELECT [whatever stats you're after] FROM table
WHERE MONTH(date_field) = 12 and YEAR(date_field) = 2011

これにより、12月の統計情報が取得されます。パフォーマンスの問題が発生し始めて、履歴データが変わらない場合は、データを非正規化して集計テーブルにしたい場合があります(必要な最小の増分、たとえば、毎日/毎時/毎月などでロールアップします)。

3
liquorvicar

mySQLでこれを行うことができます。

WHERE `DateAndTime` >= '2012-02-01 00:00:00'
AND `DateAndTime` < '2012-03-01 00:00:00'
0
Bazzz