Wie finde ich den letzten Tag des Monats ab Datum?

Lesezeit: 5 Minuten

Wie finde ich den letzten Tag des Monats ab Datum
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.

1646885048 595 Wie finde ich den letzten Tag des Monats ab Datum
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


Wie finde ich den letzten Tag des Monats ab Datum
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::createFromFormatEinzeiler

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

1646885049 524 Wie finde ich den letzten Tag des Monats ab Datum
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

986060cookie-checkWie finde ich den letzten Tag des Monats ab Datum?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy