Wie kann ich den letzten Tag des Monats in PHP erhalten?
Gegeben:
$a_date = "2009-11-23"
Ich möchte 2009-11-30; und gegeben
$a_date = "2009-12-23"
Ich möchte 2009-12-31.
Wie kann ich den letzten Tag des Monats in PHP erhalten?
Gegeben:
$a_date = "2009-11-23"
Ich möchte 2009-11-30; und gegeben
$a_date = "2009-12-23"
Ich möchte 2009-12-31.
Antworten:
t
Gibt die Anzahl der Tage im Monat eines bestimmten Datums zurück (siehe Dokumentation fürdate
):
$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
DateTime
können Sie so etwas tun:(new DateTime('2009-11-23'))->modify('last day of')
Der Code mit strtotime () schlägt nach dem Jahr 2038 fehl. (Wie in der ersten Antwort in diesem Thread angegeben) Versuchen Sie beispielsweise Folgendes:
$a_date = "2040-11-23";
echo date("Y-m-t", strtotime($a_date));
Es wird eine Antwort geben als: 1970-01-31
Daher sollte anstelle von strtotime die DateTime-Funktion verwendet werden. Der folgende Code funktioniert ohne das Problem des Jahres 2038:
$d = new DateTime( '2040-11-23' );
echo $d->format( 'Y-m-t' );
strtotime
gibt mir der Code dieses Ergebnis: 2040-11-30
Ich weiß, dass dies etwas spät ist, aber ich denke, es gibt eine elegantere Möglichkeit, dies PHP 5.3+
mithilfe der DateTime- Klasse zu tun :
$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');
Gibt es auch die eingebaute PHP-Funktion cal_days_in_month () ?
"Diese Funktion gibt die Anzahl der Tage im Monat des Jahres für den angegebenen Kalender zurück." http://php.net/manual/en/function.cal-days-in-month .
echo cal_days_in_month(CAL_GREGORIAN, 11, 2009);
// = 30
Das sollte funktionieren:
$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/>';
Was ist los - Das eleganteste für mich ist die Verwendung DateTime
Ich frage mich, ich sehe nicht DateTime::createFromFormat
, Einzeiler
$lastDay = \DateTime::createFromFormat("Y-m-d", "2009-11-23")->format("Y-m-t");
Sie können ein Datum für den ersten des nächsten Monats erstellen und dann verwenden strtotime("-1 day", $firstOfNextMonth)
mktime(0, 0, 0, $month+1, 0, $year);
strtotime()
und mktime()
abgeraten, weil. von bekannten Fehlern wie Datumsbestimmung am Rande der Monate und Schaltjahrkalakulationen. Da DateTime
verfügbar ist, sollten Sie diese Klasse verwenden, um zukünftige Probleme zu vermeiden. Wie schon oft vor mir gesagt, funktionieren beide strtotime()
und mktime()
werden nach 2038 scheitern. Deshalb habe ich ...
Versuchen Sie dies, wenn Sie PHP 5.3+ verwenden.
$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Ändern Sie Folgendes, um das letzte Datum des nächsten Monats zu ermitteln:
$date->modify('last day of 1 month');
echo $date->format('Y-m-d');
und so weiter..
Ihre Lösung ist da ..
$lastday = date('t',strtotime('today'));
31
für September
die, wie Sie wissen, das nicht richtig ist.
Sie können den letzten Tag des Monats auf verschiedene Arten finden. Aber einfach können Sie dies mit der PHP-Funktion strtotime () und date () tun. Ich würde mir vorstellen, dass Ihr endgültiger Code ungefähr so aussehen würde:
$a_date = "2009-11-23";
echo date('Y-m-t',strtotime($a_date));
Wenn Sie jedoch PHP> = 5.2 verwenden, empfehle ich dringend, das neue DateTime-Objekt zu verwenden. Zum Beispiel wie unten:
$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Sie können dies auch mit Ihrer eigenen Funktion wie folgt lösen:
/**
* 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);
Wenn Sie die Carbon API-Erweiterung für PHP DateTime verwenden, können Sie den letzten Tag des Monats abrufen mit:
$date = Carbon::now();
$date->addMonth();
$date->day = 0;
echo $date->toDateString(); // use toDateTimeString() to get date and time
$date->day = 0;
Wenn Sie einen Monat Zeit haben, erhalten Sie das letzte Datum des Monats.
public function getLastDateOfMonth($month)
{
$date = date('Y').'-'.$month.'-01'; //make date of month
return date('t', strtotime($date));
}
$this->getLastDateOfMonth(01); //31
Hier ist eine vollständige Funktion:
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));
}
Dies würde Folgendes ausgeben:
echo get_number_of_days_in_month(2,2014);
Ausgabe: 28
Es gibt Möglichkeiten, den letzten Tag des Monats zu erreichen.
//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]);
Ich bin spät dran, aber es gibt eine Handvoll einfacher Möglichkeiten, dies zu tun, wie erwähnt:
$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")));
Mit mktime () habe ich die vollständige Kontrolle über alle Aspekte der Zeit ... IE
echo "<br> ".date("Y-n-j",mktime (date("H"),date("i"),date("s"),(11+1),0,2009));
Wenn Sie den Tag auf 0 setzen und Ihren Monat um 1 verschieben, erhalten Sie den letzten Tag des Vormonats. 0 und negative Zahlen haben in den verschiedenen Argumenten den gleichen Effekt. PHP: mktime - Handbuch
Wie einige gesagt haben, ist strtotime nicht der beste Weg und wenig, wenn keiner so einfach vielseitig ist.
Ich verwende strtotime mit cal_days_in_month wie folgt:
$date_at_last_of_month=date('Y-m-d', strtotime('2020-4-1
+'.(cal_days_in_month(CAL_GREGORIAN,4,2020)-1).' day'));
Ich habe es in meine Datums- / Uhrzeit-Hilfsklasse hier https://github.com/normandqq/Date-Time-Helper eingewickelt
mit
$dateLastDay = Model_DTHpr::getLastDayOfTheMonth();
Und es ist geschafft
Eine andere Möglichkeit, mktime und nicht date ('t') zu verwenden:
$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 :)
Auf diese Weise wird entweder berechnet, ob es 31,30 oder 29 ist
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); }
}
Dies ist ein viel eleganterer Weg, um das Ende des Monats zu erreichen:
$thedate = Date('m/d/Y');
$lastDayOfMOnth = date('d', mktime(0,0,0, date('m', strtotime($thedate))+1, 0, date('Y', strtotime($thedate))));
Sie können verwenden "t
" verwenden, um die Anzahl der Tage in einem bestimmten Monat abzurufen.
Der Code wird ungefähr so aussehen:
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";
Der Code ist selbsterklärend. Hoffe es hilft.