web-dev-qa-db-fra.com

Comment trouver le dernier jour du mois à partir de la date?

Comment puis-je obtenir le dernier jour du mois en PHP?

Donné:

$a_date = "2009-11-23"

Je veux le 2009-11-30; et donné

$a_date = "2009-12-23"

Je veux le 2009-12-31.

347

t renvoie le nombre de jours du mois d'une date donnée (voir la documentation pour date ):

$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
742
Dominic Rodger

Le code utilisant strtotime () échouera après 2038. (comme indiqué dans la première réponse de ce fil) Par exemple, essayez ce qui suit:

$a_date = "2040-11-23";
echo date("Y-m-t", strtotime($a_date));

Il donnera la réponse comme: 1970-01-31

Donc, au lieu de strtotime, la fonction DateTime devrait être utilisée. Le code suivant fonctionnera sans problème avec l’Année 2038:

$d = new DateTime( '2040-11-23' ); 
echo $d->format( 'Y-m-t' );
104
Mugunth

Je sais que c'est un peu tard, mais je pense qu'il existe un moyen plus élégant de le faire avec PHP 5.3+ en utilisant le DateTime class:

$date = new DateTime('now');
$date->modify('last day of this month');
echo $date->format('Y-m-d');
91
Hannoun Yassir

Il y a aussi la fonction PHP intégrée cal_days_in_month ()?

"Cette fonction renvoie le nombre de jours du mois de l'année pour le calendrier spécifié." http://php.net/manual/en/function.cal-days-in-month .

echo cal_days_in_month(CAL_GREGORIAN, 11, 2009); 
// = 30
66
MPV

Cela devrait fonctionner:

$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());

$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());

$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());

echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';

echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';

echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';
24
kaleazy

Vous pouvez créer une date pour le premier du mois prochain, puis utiliser strtotime("-1 day", $firstOfNextMonth)

17
nikc.org

Essayez ceci si vous utilisez PHP 5.3+,

$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');

Pour trouver le mois dernier la dernière date, modifiez comme suit,

 $date->modify('last day of 1 month');
 echo $date->format('Y-m-d');

etc..

13
Mohammed Safeer

Quel est le problème - Le plus élégant pour moi utilise DateTime

Je me demande je ne vois pas DateTime::createFromFormat , one-liner

_$lastDay = \DateTime::createFromFormat("Y-m-d", "2009-11-23")->format("Y-m-t");
_
12
john Smith

Votre solution est ici ..

$lastday = date('t',strtotime('today'));
9
Vineet Kadkol

Si vous utilisez l'extension d'API Carbon pour PHP DateTime, vous pouvez obtenir le dernier jour du mois avec:

$date = Carbon::now();
$date->addMonth();
$date->day = 0;
echo $date->toDateString(); // use toDateTimeString() to get date and time 
7
eaykin

Vous pouvez trouver le dernier jour du mois de plusieurs façons. Mais vous pouvez le faire simplement en utilisant PHP strtotime () et date () function.J'imaginais que votre code final ressemblerait à ceci:

$a_date = "2009-11-23";
echo date('Y-m-t',strtotime($a_date));

Démo en direct

Mais si vous utilisez PHP> = 5.2, je vous suggère fortement d'utiliser le nouvel objet DateTime. Par exemple, comme ci-dessous:

$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');

Démo en direct

Aussi, vous pouvez résoudre ceci en utilisant votre propre fonction comme ci-dessous:

/**
 * Last date of a month of a year
 *
 * @param[in] $date - Integer. Default = Current Month
 *
 * @return Last date of the month and year in yyyy-mm-dd format
 */
function last_day_of_the_month($date = '')
{
    $month  = date('m', strtotime($date));
    $year   = date('Y', strtotime($date));
    $result = strtotime("{$year}-{$month}-01");
    $result = strtotime('-1 second', strtotime('+1 month', $result));

    return date('Y-m-d', $result);
}

$a_date = "2009-11-23";
echo last_day_of_the_month($a_date);
5
Faisal

Vous pouvez également l'utiliser avec datetime

$date = new \DateTime();
$nbrDay = $date->format('t');
$lastDay = $date->format('Y-m-t');
4
Ajouve

Avec Zend_Date, c'est assez simple:

$date->setDay($date->get(Zend_Date::MONTH_DAYS));
2
mkerstner
$date1 = $year.'-'.$month; 
$d = date_create_from_format('Y-m',$date1); 
$last_day = date_format($d, 't');
2
kayla

Si vous avez un mois, obtenez la dernière date du mois,

public function getLastDateOfMonth($month)
    {
        $date = date('Y').'-'.$month.'-01';  //make date of month 
        return date('t', strtotime($date)); 
    }

$this->getLastDateOfMonth(01); //31
1
Kaushik shrimali

Voici une fonction complète:

public function get_number_of_days_in_month($month, $year) {
    // Using first day of the month, it doesn't really matter
    $date = $year."-".$month."-1";
    return date("t", strtotime($date));
}

Cela donnerait les résultats suivants:

echo get_number_of_days_in_month(2,2014);

Sortie: 28

1
Firze

Je suis en retard, mais il existe une poignée de moyens faciles de le faire, comme mentionné:

$days = date("t");
$days = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
$days = date("j",mktime (date("H"),date("i"),date("s"),(date("n")+1),0,date("Y")));

Utiliser mktime () est ma meilleure solution pour contrôler tous les aspects du temps ... I.E.

echo "<br> ".date("Y-n-j",mktime (date("H"),date("i"),date("s"),(11+1),0,2009));

Si vous réglez le jour sur 0 et que vous augmentez votre mois de 1, vous obtiendrez le dernier jour du mois précédent. 0 et les nombres négatifs ont un effet similaire dans les différents arguments. PHP: mktime - Manuel

Comme quelques-uns l’ont dit, strtotime n’est pas la solution la plus solide, et peu, voire aucun, aussi polyvalent.

1
JSG

Il existe des moyens d'obtenir le dernier jour du mois.

//to get last day of current month
echo date("t", strtotime('now'));

//to get last day from specific date
$date = "2014-07-24";
echo date("t", strtotime($date));

//to get last day from specific date by calendar
$date = "2014-07-24";
$dateArr=explode('-',$date);
echo cal_days_in_month(CAL_GREGORIAN, $dateArr[1], $dateArr[0]); 
1
vineet

Carbon Extension API pour PHP DateTime

Carbon::parse("2009-11-23")->lastOfMonth()->day;

ou

Carbon::createFromDate(2009, 11, 23)->lastOfMonth()->day;

va se retirer

30
0
josef

Une autre méthode utilisant mktime et non la date ('t'):

$dateStart= date("Y-m-d", mktime(0, 0, 0, 10, 1, 2016)); //2016-10-01
$dateEnd = date("Y-m-d", mktime(0, 0, 0, 11, 0, 2016)); //This will return the last day of october, 2016-10-31 :)

Donc, de cette façon, il calcule si c'est 31,30 ou 29

0
Robin Rumeau

Je l'ai emballé ici dans ma classe d'aide sur l'heure de la date https://github.com/normandqq/Date-Time-Helper en utilisant $dateLastDay = Model_DTHpr::getLastDayOfTheMonth();

Et c'est fait

0
Norman