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.
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
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"));
$prevmonth = date('M Y', strtotime("last month"));
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
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'));
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>
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 ...
public function getLastMonth() {
$now = new DateTime();
$lastMonth = $now->sub(new DateInterval('P1M'));
return $lastMonth->format('Ym');
}
$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);
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.
$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
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")));
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)
Ç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
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'
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