Comment obtenir le dernier jour du mois en PHP?
Donné:
$a_date = "2009-11-23"
Je veux le 2009-11-30; et étant donné
$a_date = "2009-12-23"
Je veux le 2009-12-31.
Comment obtenir le dernier jour du mois en PHP?
Donné:
$a_date = "2009-11-23"
Je veux le 2009-11-30; et étant donné
$a_date = "2009-12-23"
Je veux le 2009-12-31.
Réponses:
t
renvoie le nombre de jours dans le mois d'une date donnée (voir la documentation pourdate
):
$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
DateTime
vous pouvez faire quelque chose comme ça:(new DateTime('2009-11-23'))->modify('last day of')
Le code utilisant strtotime () échouera après l'année 2038. (comme indiqué dans la première réponse de ce fil) Par exemple, essayez d'utiliser 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
Ainsi, au lieu de strtotime, la fonction DateTime doit être utilisée. Le code suivant fonctionnera sans problème de l'année 2038:
$d = new DateTime( '2040-11-23' );
echo $d->format( 'Y-m-t' );
strtotime
code me donne ce résultat: 2040-11-30
Je sais que c'est un peu tard mais je pense qu'il existe une façon plus élégante de le faire PHP 5.3+
en utilisant la classe DateTime :
$date = new DateTime('now');
$date->modify('last day of this month');
echo $date->format('Y-m-d');
$date = DateTime::createFromFormat('m/d/Y', '1/10/2014');
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/>';
Quel est le problème - Le plus élégant pour moi est d'utiliser 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");
Vous pouvez créer une date pour le premier du mois suivant, puis utiliser strtotime("-1 day", $firstOfNextMonth)
mktime(0, 0, 0, $month+1, 0, $year);
strtotime()
et mktime()
est découragée bec. de bogues connus comme la détermination de la date en bordure des mois et les calculs des années bissextiles. Étant donné que DateTime
est disponible, vous devez utiliser cette classe pour éviter tout problème à l'avenir. Comme je l'ai dit à plusieurs reprises avant moi, ces deux fonctions strtotime()
et mktime()
échoueront après 2038. C'est pourquoi j'ai rétrogradé ...
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 la date du mois prochain, modifiez comme suit,
$date->modify('last day of 1 month');
echo $date->format('Y-m-d');
etc..
Votre solution est là ..
$lastday = date('t',strtotime('today'));
31
pour September
lequel, comme vous le savez, ce n'est pas correct.
Vous pouvez trouver le dernier jour du mois de plusieurs façons. Mais vous pouvez simplement le faire en utilisant la fonction PHP strtotime () et date () . J'imagine 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');
En outre, vous pouvez résoudre ce problème 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);
Si vous utilisez l' extension Carbon API 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
$date->day = 0;
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 la sortie suivante:
echo get_number_of_days_in_month(2,2014);
Sortie: 28
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]);
Une autre façon d'utiliser mktime et non 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 soit 31,30 soit 29
Je suis en retard, mais il existe plusieurs façons simples de procéder, 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 mon choix pour un contrôle complet sur tous les aspects du temps ... IE
echo "<br> ".date("Y-n-j",mktime (date("H"),date("i"),date("s"),(11+1),0,2009));
Mettre le jour à 0 et déplacer votre mois vers le haut 1 vous donnera le dernier jour du mois précédent. 0 et les nombres négatifs ont l'effet similaire dans les différents arguments. PHP: mktime - Manuel
Comme certains l'ont dit, le strtotime n'est pas la voie la plus solide et peu, voire aucun, est aussi facilement polyvalent.
J'utilise strtotime avec cal_days_in_month comme suit:
$date_at_last_of_month=date('Y-m-d', strtotime('2020-4-1
+'.(cal_days_in_month(CAL_GREGORIAN,4,2020)-1).' day'));
Je l'ai enveloppé dans ma classe d'aide de date et heure ici
https://github.com/normandqq/Date-Time-Helper
utilisant
$dateLastDay = Model_DTHpr::getLastDayOfTheMonth();
Et c'est fait
function first_last_day($string, $first_last, $format) {
$result = strtotime($string);
$year = date('Y',$result);
$month = date('m',$result);
$result = strtotime("{$year}-{$month}-01");
if ($first_last == 'last'){$result = strtotime('-1 second', strtotime('+1 month', $result)); }
if ($format == 'unix'){return $result; }
if ($format == 'standard'){return date('Y-m-d', $result); }
}
C'est une façon beaucoup plus élégante d'obtenir la fin du mois:
$thedate = Date('m/d/Y');
$lastDayOfMOnth = date('d', mktime(0,0,0, date('m', strtotime($thedate))+1, 0, date('Y', strtotime($thedate))));
Vous pouvez utiliser "t
" dans la fonction date pour obtenir le nombre de jours dans un mois particulier.
Le code ressemblera à ceci:
function lastDateOfMonth($Month, $Year=-1) {
if ($Year < 0) $Year = 0+date("Y");
$aMonth = mktime(0, 0, 0, $Month, 1, $Year);
$NumOfDay = 0+date("t", $aMonth);
$LastDayOfMonth = mktime(0, 0, 0, $Month, $NumOfDay, $Year);
return $LastDayOfMonth;
}
for($Month = 1; $Month <= 12; $Month++)
echo date("Y-n-j", lastDateOfMonth($Month))."\n";
Le code s'explique de lui-même. Alors j'espère que ça aide.