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.
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));
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' );
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');
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
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/>';
Vous pouvez créer une date pour le premier du mois prochain, puis utiliser strtotime("-1 day", $firstOfNextMonth)
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..
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");
_
Votre solution est ici ..
$lastday = date('t',strtotime('today'));
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
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));
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');
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);
Vous pouvez également l'utiliser avec datetime
$date = new \DateTime();
$nbrDay = $date->format('t');
$lastDay = $date->format('Y-m-t');
Avec Zend_Date, c'est assez simple:
$date->setDay($date->get(Zend_Date::MONTH_DAYS));
$date1 = $year.'-'.$month;
$d = date_create_from_format('Y-m',$date1);
$last_day = date_format($d, 't');
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
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
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.
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]);
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
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
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