it-swarm.com.de

Der beste Weg, um den ersten und letzten Tag des letzten Monats zu erhalten?

Ich suche den besten Weg, um den ersten und den letzten Tag eines letzten Monats zu erhalten. Ich benutze sie, um SQL-Abfragen zu machen, um Statistiken des letzten Monats zu erhalten.

Ich denke, das ist der beste Weg, mehr optimiert, aber nicht günstiger. Hat jemand einen anderen Weg, das Gleiche zu tun? 

    $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"))));

Vielen Dank!!

41
aaronroman

In PHP 5.3 können Sie die DateTime-Klasse verwenden:

<?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
113
Phen

Letzter Tag des Vormonats:

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

Erster Tag des Vormonats: 

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

Ich verwende diese in MySQL und PHP Skripten, kurz und einfach:

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

MySQL-Anwendungsbeispiel:

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

Wenn Sie dies zum Zweck einer MySQL-Abfrage tun, haben Sie die Verwendung der Funktion MONTH in Betracht gezogen, z.

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

Dies würde Ihre Statistiken für Dezember erhalten. Wenn Sie zu Leistungsproblemen kommen und sich die Verlaufsdaten nicht ändern, möchten Sie die Daten möglicherweise in eine Aggregat-Tabelle denormalisieren (durch das kleinste Inkrement, das Sie benötigen, z. B. täglich/stündlich/monatlich usw.).

3
liquorvicar

sie können dies in MySQL tun:

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