Wie bekomme ich das Datum von gestern mit PHP?


88

Ich möchte das gestrige Datum mit einem bestimmten Datumsformat in PHP erhalten. Dies ist das Format:

$today = date("d.m.Y"); //15.04.2013

Ist es möglich?

Berücksichtigen Sie Monat und Jahr, wenn sie jeweils geändert werden sollten.


1
Datum ("dmy", Uhrzeit () - 60 * 60 * 24);
NINCOMPOOP

Hast du meine Lösung ausprobiert? Dies wird auch mit wechselnden Monaten funktionieren
Fabio

der perfekte Moment, wenn der Benutzername "noob" über mir seinem Kommentar eine gute Bedeutung hinzufügt :)
STT LCU

Antworten:


257

los geht's

date('d.m.Y',strtotime("-1 days"));

Dies funktioniert auch, wenn sich der Monat ändert


Ein kleiner Trottel: Ihre Funktion gerät gegen Mitternacht in Schwierigkeiten, wenn sich diese Zeitspanne über die Sommerzeit erstreckt. Es hilft dort, explizit über den Mittag zu gehen.
Deduplikator

1
Falsch . 3 Dinge über die Sommerzeit: 1 Es hängt von der Serverzeit ab. Wenn der Server die richtige Zeitzone hat, hat dies keine Auswirkungen auf meine Funktion. 2 Nicht die ganze Welt ist von der Sommerzeit betroffen, es gibt Orte, die sie nicht nutzen. 3 Die meisten Orte ändern die Zeit in den ersten Stunden des Tages (z. B. 2 oder 3 Uhr morgens), sodass ein sich ändernder Tag nicht beeinträchtigt wird.
Fabio

1
1. Diese Funktion weiß also und beachtet, dass ein Tag anders als 24 Stunden sein kann? 2. Auch eine kaputte Uhr stimmt zweimal täglich. 3. Die genaue Stunde, die gestohlen / dupliziert wird, ist für die Berechnung nicht so wichtig.
Deduplikator

1
Kein Sinn 1 pro Tag ist nicht anders als 24, bis die Sommerzeit die Zeit ändert und der Server die Zeit entsprechend ändert. 2 Das ist es natürlich, aber das ist nicht der Punkt. 3 Dies ist stattdessen sehr wichtig. Ihre Idee könnte richtig sein, wenn sich die Zeit um Mitternacht ändert. nicht in anderen Stunden
Fabio

7

Schritt 1

Wir müssen Formatdaten in function date () festlegen: Function date () gibt eine Zeichenfolge zurück, die gemäß der angegebenen Formatzeichenfolge unter Verwendung des angegebenen ganzzahligen Zeitstempels oder der aktuellen Zeit formatiert ist, wenn kein Zeitstempel angegeben ist. Mit anderen Worten, der Zeitstempel ist optional und standardmäßig der Wert von time ().

<?php
echo date("F j, Y");
?>

Ergebnis: 30. März 2010

Schritt 2

Verwenden Sie für das Datum "gestern" die PHP-Funktion mktime (): Die Funktion mktime () gibt den Unix-Zeitstempel zurück, der den angegebenen Dokumenten entspricht. Dieser Zeitstempel ist eine lange Ganzzahl, die die Anzahl der Sekunden zwischen der Unix-Epoche (1. Januar 1970, 00:00:00 GMT) und der angegebenen Zeit enthält. Argumente können in der Reihenfolge von rechts nach links weggelassen werden. Alle Argumente, die weggelassen werden, werden entsprechend der Ortsangabe und der Zeit auf den aktuellen Wert gesetzt.

<?php
echo mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
?>

Ergebnis: 1269820800

Schritt 3

Führen Sie nun alle zusammen und sehen Sie sich Folgendes an:

<?php
$yesterday = date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")-1,date("Y")));
echo $yesterday;
?>

Ergebnis: 29. März 2010

In ähnlicher Weise ist es möglich, eine Zeitstunde zurück zu erhalten.

<?php
$yesterday = date("H:i:s",mktime(date("H"), 0, 0, date("m"),date("d"), date("Y")));
echo $yesterday;
?>

Ergebnis: 20:00:00

oder vor 7 Tagen:

<?php
$week = date("Y-m-d",mktime(0, 0, 0, date("m"), date("d")-7,date("Y")));
echo $week;
?>

Ergebnis: 23.03.2010


7

Versuche dies

        $tz    = new DateTimeZone('Your Time Zone');
        $date  = new DateTime($today,$tz);
        $interval = new DateInterval('P1D');
        $date->sub($interval); 

        echo $date->format('d.m.y');

        ?>           

siehe diese php.net/manual/en/book.datetime.php '.. Dies wird auch mit Monatswechsel
funktionieren

9
neue DateTime ('gestern')
Virgili Garcia

$ gestern = neue DateTime ('gestern', neue DateTimeZone ('Ihre Zeitzone'));
Miralong

Eine kleine Erklärung mit dieser Nur-Code-Antwort wäre nett.
Mickmackusa

6

Sie können dies tun, indem Sie

date("F j, Y", time() - 60 * 60 * 24);

oder von

date("F j, Y", strtotime("yesterday"));

3
Nicht garantiert mit Sommerzeit ... Leute sollten heutzutage wirklich DateTime-Objekte verwenden
Mark Baker

Funktioniert einwandfrei, wenn mit UTC-Zeit gearbeitet wird. date_default_timezone_set ('UTC');
Patrick

2

Versuche dies

<?php
$yesterday = date(“d.m.Y”, time()-86400);
echo $yesterday;

3
Aufgrund der Sommerzeit hat ein Tag nicht immer 86400 Sekunden! Diese Berechnung könnte also zweimal im Jahr falsch sein!
Sbrbot

... und aufgrund von Schaltsekunden.
Sebastian Mach


1

Wenn Sie die Zeitzone in Ihrer PHP-App definieren (wie Sie sollten), können Sie dies folgendermaßen tun:

date_default_timezone_set('Europe/Paris');

Dann ist es so einfach wie:

$yesterday = new DateTime('yesterday'); // will use our default timezone, Paris
echo $yesterday->format('Y-m-d'); // or whatever format you want

(Möglicherweise möchten Sie eine Konstante oder Umgebungsvariable definieren, um Ihre Standardzeitzone zu speichern.)


1

Eine weitere OOP-Methode für DateTime mit der Einstellung der genauen Stunde:

$yesterday = new DateTime("yesterday 09:00:59", new DateTimeZone('Europe/London'));
echo $yesterday->format('Y-m-d H:i:s') . "\n";

0

Sie können dies auch mit der Carbon- Bibliothek tun :

Carbon::yesterday()->format('d.m.Y');         // '26.03.2019'

In anderen Formaten:

Carbon::yesterday()->toDateString();          // '2019-03-26'
Carbon::yesterday()->toDateTimeString();      // '2019-03-26 00:00:00'

Carbon::yesterday()->toFormattedDateString(); // 'Mar 26, 2019'
Carbon::yesterday()->toDayDateTimeString();   // 'Tue, Mar 26, 2019 12:00 AM'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.