web-dev-qa-db-fra.com

Obtenir la date du mois dernier en php

Je veux connaître la date du mois dernier. J'ai écrit ceci:

$prevmonth = date('M Y');

Ce qui me donne le mois/année en cours. Je ne peux pas dire si je devrais utiliser strtotime, mktime. Quelque chose à l'horodatage? Dois-je ajouter quelque chose par la suite à réinitialiser pour que la date ne soit pas définie sur le mois dernier pour tous les horodatages de mon site? J'essaie de RTM mais c'est difficile pour moi de comprendre cela.

76
pg.

C'est simple d'avoir la date du mois dernier

echo date("Y-n-j", strtotime("first day of previous month"));
echo date("Y-n-j", strtotime("last day of previous month"));

au 3 novembre retourne

2014-10-1
2014-10-31
190
OzzyCzech
echo strtotime("-1 month");

Cela affichera l'horodatage du mois dernier exactement. Vous n'avez pas besoin de réinitialiser quoi que ce soit après. Si vous le souhaitez ensuite dans un format anglais, vous pouvez utiliser date () pour formater l'horodatage, c'est-à-dire:

echo date("Y-m-d H:i:s",strtotime("-1 month"));
28
zombat
$prevmonth = date('M Y', strtotime("last month"));
19
Scharrels

Les réponses incorrectes sont:

$lastMonth = date('M Y', strtotime("-1 month"));
$lastDate = date('Y-m', strtotime('last month'));

La raison en est que si le mois en cours est supérieur à 30 jours mais que le mois précédent en compte 29 et moins, $ lastMonth sera identique au mois en cours.

par exemple.

If $currentMonth = '30/03/2016';
echo $lastMonth = date('m-Y', strtotime("-1 month")); => 03-2016
echo $lastDate = date('Y-m', strtotime('last month')); => 2016-03

La réponse correcte sera:

echo date("m-Y", strtotime("first day of previous month")); => 02-2016
echo sprintf("%02d",date("m")-1) . date("-Y"); => 02-2016
echo date("m-Y",mktime(0,0,0,date("m")-1,1,date("Y"))); => 02-2016
8
Fury

si vous voulez obtenir juste le mois précédent, alors vous pouvez utiliser comme suit

$prevmonth = date('M Y', strtotime('-1 months'));

si vous voulez avoir les mêmes jours du mois précédent, alors vous pouvez utiliser comme suit.

$prevmonth = date('M Y d', strtotime('-1 months'));

si vous voulez avoir la dernière date du mois précédent, alors vous pouvez utiliser comme suit ...

$prevmonth = date('M Y t', strtotime('-1 months'));

si vous voulez avoir la première date du mois précédent, alors vous pouvez utiliser comme suit ...

$prevmonth = date('M Y 1', strtotime('-1 months'));
7
Md. Maruf Hossain
echo date('Y',strtotime("-1 year"));        //last year<br>
echo date('d',strtotime("-1 day"));     //last day<br>
echo date('m',strtotime("-1 month"));       //last month<br>
4
Vaishu

Trouvé celui-ci faux lorsque les mois précédents est plus court que courant.

echo date("Y-m-d H:i:s",strtotime("-1 month"));

Essayez le 30 mars et vous obtiendrez le 2012-03-01 au lieu de 2012-02 ...

Travailler sur une meilleure solution ...

4
Jay_69
public function getLastMonth() {
    $now = new DateTime();
    $lastMonth = $now->sub(new DateInterval('P1M'));
    return $lastMonth->format('Ym');
}
2
user1343300
$lastMonth = date('M Y', strtotime("-1 month"));
var_dump($lastMonth);
$lastMonth = date('M Y', mktime(0, 0, 0, date('m') - 1, 1, date('Y')));
var_dump($lastMonth);
2
bloody numen

Utilisez ce code pour obtenir le mois précédent pour une date donnée:

$tgl = '25 january 2012';

$prevmonth = date("M Y",mktime(0,0,0,date("m", strtotime($tgl))-1,1,date("Y", strtotime($tgl))));
echo $prevmonth;

Le résultat est décembre 2011. Fonctionne sur un mois avec un jour plus court que le mois précédent.

1
abdul
$time = mktime(0, 0, 0, date("m"),date("d")-date("t"), date("Y"));
$lastMonth = date("d-m-Y", $time);

OR

$lastMonth = date("m-Y", mktime() - 31*3600*24);

fonctionne le 30.03.2012

1
Paul

Oh, je l'ai compris, s'il vous plaît, ignorez à moins que vous n'ayez le même problème que moi, auquel cas:

$prevmonth = date("M Y",mktime(0,0,0,date("m")-1,1,date("Y")));
1
pg.

Vous pouvez utiliser strtotime , ce qui est bien dans ce genre de situation:

$timestamp = strtotime('-1 month');
var_dump(date('Y-m', $timestamp));

Vous obtiendrez:

string '2009-11' (length=7)
1
Pascal MARTIN

Ça marche pour moi:

Aujourd'hui, c'est: 31/03/2012

echo date("Y-m-d", strtotime(date('m', mktime() - 31*3600*24).'/01/'.date('Y').' 00:00:00')); // 2012-02-01
echo  date("Y-m-d", mktime() - 31*3600*24); // 2012-02-29
0

Cette question est assez ancienne, mais voici quand même. Si vous essayez de ne recevoir que le mois précédent et que le jour n'a pas d'importance, vous pouvez utiliser ceci:

$date = '2014-01-03';

$dateTime = new DateTime($date);

$lastMonth = $dateTime->modify('-' . $dateTime->format('d') . ' days')->format('F Y');

echo $lastMonth; // 'December 2013'
0
Jay Kravetz

Si vous voulez avoir la première date du mois précédent, alors vous pouvez utiliser comme suit ... $prevmonth = date('M Y 1', strtotime('-1 months')); quoi? la première date sera toujours 1: D

0
user2846324