web-dev-qa-db-fra.com

Trouver le dernier jour du mois précédent dans PHP

Je ne sais pas trop pourquoi cela ne parvient pas à trouver le dernier jour du mois précédent. Chaque étape semble fonctionner correctement, sauf lorsque la date finale est créée.

<?php

$currentMonth = date('n');
$currentYear = date('Y');

if($currentMonth == 1) {
    $lastMonth = 12;
    $lastYear = $currentYear - 1;
}
else {
    $lastMonth = $currentMonth -1;
    $lastYear = $currentYear;
}

if($lastMonth < 10) {
    $lastMonth = '0' . $lastMonth;
}

$lastDayOfMonth = date('t', $lastMonth);

$lastDateOfPreviousMonth = $lastYear . '-' . $lastMonth . '-' . $lastDayOfMonth;

$newLastDateOfMonth = date('F j, Y', strtotime($lastDateOfPreviousMonth));

?>

$lastDateOfPreviousMonth renvoie 2012-09-30 comme prévu; cependant, après avoir essayé de le convertir au 30 septembre 2012 - $newLastDateOfMonth est renvoyé le 1er octobre 2012. Où puis-je me tromper?

EDIT: Si vous utilisez date("t/m/Y", strtotime("last month")); ou date('Y-m-d', strtotime('last day of previous month'));, l’un ou l’autre de ces éléments sera-t-il encore viable depuis le 01.01.2013, c’est-à-dire qu’ils prendront en compte le changement d’année?

18
William Orazi
echo date('Y-m-d', strtotime('last day of previous month'));
//2012-09-30

ou

$date = new DateTime();
$date->modify("last day of previous month");
echo $date->format("Y-m-d");

Édition ultérieure: documentation php.net - formats relatifs pour strtotime (), DateTime et date_create ()

65
Mihai Iorga

Il y a une fonction php pour cela. 

echo date("t/m/Y", strtotime("last month"));
19
Lea

Premier jour de ce mois, moins 1 seconde.

echo date('Y-m-d',strtotime('-1 second',strtotime(date('m').'/01/'.date('Y'))));

Exemple ici .

4
wesside

Vous pouvez également utiliser la fonctionnalité de traitement du zéro de strtotime():

# Day Before
    echo date('Y-m-d', strtotime('2016-03-00')); // 2016-02-29

# Year can be handled too
    echo date('Y-m-d', strtotime('2016-01-00')); // 2015-12-31

# Month Before
    echo date('Y-m-d', strtotime('2016-00-01')); // 2015-12-01

# Month AND Day
    echo date('Y-m-d', strtotime('2016-00-00')); // 2015-11-30

Cela a du sens si vous pensez à 00 comme "un de moins que le premier (01)".

Donc, pour atteindre l’objectif de cette question, «dernier jour du mois précédent» est un cas simple de

date('your_format', strtotime('YYYY-ThisMonth-00'));
# So:
date('Y-m-d', strtotime('2016-11-00')); // 2016-10-31
1
Dan Streeter

s'il vous plaît essayer avec la réponse ci-dessous.

code:

echo date("t/m/Y", strtotime("-1 months"));

Vous aurez le dernier jour des 12 derniers mois.

Exemple:

<?php
for ($i = 1; $i <= 12; $i++) {
    $months[] = date("t/m/Y l", strtotime(" -$i months"));
}
print_r($months);
?>

Sortie:

Array
(
    [0] => 30/11/2018 Monday
    [1] => 31/10/2018 Friday
    [2] => 30/09/2018 Wednesday
    [3] => 31/08/2018 Sunday
    [4] => 31/07/2018 Thursday
    [5] => 30/06/2018 Tuesday
    [6] => 31/05/2018 Saturday
    [7] => 30/04/2018 Thursday
    [8] => 31/03/2018 Monday
    [9] => 28/02/2018 Monday
    [10] => 31/01/2018 Friday
    [11] => 31/12/2017 Tuesday
)
0
stalinrajindian