Wie bekomme ich den letzten Tag des Monats in PHP?
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.
Mithun Sreedharan
Wie bekomme ich den letzten Tag des Monats in PHP?
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.
Dominik Rodger
t
gibt die Anzahl der Tage im Monat eines bestimmten Datums zurück (siehe die Dokumente für date
):
$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
Dies wird nach dem Jahr 2038 fehlschlagen. Anstelle von strtotime sollte also die DateTime-Funktion verwendet werden. Der folgende Code funktioniert ohne Probleme mit dem Jahr 2038: $d = new DateTime( ‘2009-11-23’ ); echo $d->format( ‘Ymt’ );
– Mugunt
1. März 2012 um 1:42 Uhr
@Mugunth Wenn Sie 24 Jahre in der Zukunft mit Daten arbeiten, können Probleme früher als 2038 auftreten. Server wechseln jedoch bereits zur 64-Bit-Architektur, was uns etwa 292 Milliarden Jahre Zeit gibt, um das Problem zu beheben.
– Keiner
7. Februar 2013 um 5:59 Uhr
in prozedural -> $date1 = $year.’-‘.$month; $d = date_create_from_format(‘Y-m’,$date1); $last_day = date_format($d, ‘t’);
– Kayla
16. Juli 2013 um 1:05 Uhr
Mit DateTime
Sie können so etwas tun: (new DateTime('2009-11-23'))->modify('last day of')
– Viktor
24. Februar 2016 um 16:31 Uhr
@victor Sie sollten Ihren Kommentar aus dem einzigen Grund als Antwort stoßen, dass er zu lesbarem und verständlichem Code führt. Natürlich würde die Verwendung von Ymt auch funktionieren, aber wer würde ohne Blick auf die Dokumente wissen, was “t” ist?
– der König2
21. August 2021 um 8:33 Uhr
Der Code, der strtotime() verwendet, 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 folgende Antwort geben: 1970-01-31
Anstelle von strtotime sollte also die DateTime-Funktion verwendet werden. Der folgende Code funktioniert ohne Probleme mit dem Jahr 2038:
$d = new DateTime( '2040-11-23' );
echo $d->format( 'Y-m-t' );
Bis dahin werde ich 71 und im Ruhestand sein, also kein Problem für mich! j/k Aber im Ernst, Leute – beachtet diese Warnung!
– Wolomike
2. November 2012 um 3:44 Uhr
Dies setzt voraus, dass Sie eine 32-Bit-Version von PHP ausführen.
– Keiner
7. Februar 2013 um 6:00 Uhr
warum wird diese alarmierende Tatsache über strtotime nicht in der PHP-Dokumentation erwähnt php.net/manual/de/function.strtotime.php ?
– Adam
19. Dezember 2015 um 15:08 Uhr
@Adam Es ist jetzt nicht sicher, ob es war, als Sie es überprüft haben. php.net/manual/de/…
– Mave
22. März 2016 um 12:06 Uhr
Ab 2018 ist die strtotime
Code gibt mir dieses Ergebnis: 2040-11-30
– Eje
29. August 2018 um 18:34 Uhr
Hannum Jassir
Ich weiß, das ist ein bisschen spät, aber ich denke, es gibt einen eleganteren Weg, dies zu tun PHP 5.3+
durch die Verwendung der Terminzeit Klasse :
$date = new DateTime('now');
$date->modify('last day of this month');
echo $date->format('Y-m-d');
In einer Zeile: $date = new DateTime(‘letzter Tag dieses Monats’);
– Harald
27. November 2014 um 15:27 Uhr
Vielleicht möchten Sie $date->modify(‘letzter Tag dieses Monats’)->setTime(23,59,59); wenn Sie diese dateTime zum Vergleich verwenden möchten, wo es auf die Zeit ankommt. (Dies gibt Ihnen die letzte Sekunde des Monats)
– omgitsdrobinoha
20. November 2016 um 12:57 Uhr
Das funktioniert: $date = new DateTime('last day of 2020-2');
– Benutzer5051310
20. Februar 2017 um 16:48 Uhr
@Johannes du liegst falsch. der letzte Tag wird mit dem $date-Objekt und nicht mit dem Systemdatum berechnet. Probieren Sie es aus, indem Sie die erste Zeile folgendermaßen ändern: $date = DateTime::createFromFormat('m/d/Y', '1/10/2014');
– Hannun Jassir
14. September 2017 um 9:50 Uhr
Wenn Sie denken oder zumindest versuchen würden, worum ich Sie gebeten habe, würden Sie das sehen diesen Monat bedeutet den Wert des Monats im DateTime-Objekt, nicht das Datum des Systems. Wenn Sie keinen PHP-Code eingeben/ausführen können, könnte dies hilfreich sein: sandbox.onlinephpfunctions.com/code/…
– Hannun Jassir
14. September 2017 um 12:43 Uhr
Es gibt 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/>';
Am elegantesten ist für mich 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");
nikc.org
Sie könnten ein Datum für den Ersten des nächsten Monats erstellen und dann verwenden strtotime("-1 day", $firstOfNextMonth)
Eine alternative Methode, die den gleichen Ansatz verwendet, besteht darin, mktime den 0. Tag des nächsten Monats zu geben mktime(0, 0, 0, $month+1, 0, $year);
– George
21. November 2013 um 8:59 Uhr
Was mich betrifft, die Verwendung von strtotime()
und mktime()
ist entmutigt, weil. bekannter Fehler wie Datumsermittlung am Monatsrand und Schaltjahresberechnungen. Seit 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()
wird nach 2038 scheitern. Deshalb habe ich abgelehnt …
– Paul T. Rawkeen
4. Dezember 2013 um 12:33 Uhr
@PaulT.Rawkeen Diese Antwort ist mehr als 4 Jahre alt. Wie bei allem im Internet sollte das Alter ein Faktor bei der Beurteilung von Relevanz und Nützlichkeit sein. Darüber hinaus ist meiner Meinung nach die Halbierungszeit für alles, was mit Technologie zu tun hat, besonders kurz.
– nikc.org
12. Dezember 2013 um 11:40 Uhr
@nikc.org Dem stimme ich zu, insbesondere was die Lebensdauer aller technischen Lösungen und Lösungsansätze betrifft. In diesem speziellen Fall hat die Antwort eine relativ gute Anzahl positiver Stimmen und wahrscheinlich jemand (Junior Programmierer) wird diese Antwort als akzeptable Lösung betrachten, da. es ist kurz und elegant 🙂 und er wird wahrscheinlich das erwartete Ergebnis erzielen, aber mit der Zeit wird diese Art der Lösung solcher Probleme schwierig und wir sollte warnen Sie vor solchen Tatsachen, wenn es möglich ist. Mit freundlichen Grüßen.
– Paul T. Rawkeen
12. Dezember 2013 um 12:28 Uhr