web-dev-qa-db-fra.com

La meilleure façon d'obtenir le premier et le dernier jour du mois dernier?

Je cherche le meilleur moyen d'obtenir le premier et le dernier jour du dernier mois. Je les utilise pour faire des requêtes SQL pour obtenir des statistiques du mois dernier.

Je pense que c'est la meilleure façon, plus optimisée mais pas plus compréhensive, est-ce que quelqu'un a une autre façon de faire la même chose? 

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

Merci!!

41
aaronroman

Dans PHP 5.3, vous pouvez utiliser la classe 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
113
Phen

Dernier jour du mois précédent:

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

Premier jour du mois précédent: 

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

J'utilise ces scripts dans MySQL et PHP, en quelques mots simples:

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

Exemple d'utilisation de MySQL:

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

Si vous faites cela dans le but d’une requête MySQL, avez-vous envisagé d’utiliser la fonction MONTH , par exemple.

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

Cela donnerait vos statistiques pour décembre. Si vous commencez à rencontrer des problèmes de performances et que les données historiques ne changent pas, vous voudrez peut-être dénormaliser les données dans une table agrégée (multipliée par le plus petit incrément requis, par exemple, quotidien/horaire/mensuel, etc.).

3
liquorvicar

vous pouvez le faire dans MySQL:

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