Die Funktion `date()` ist ein Werkzeug für die Arbeit mit Datum und Uhrzeit. Sie wird in zwei Fällen verwendet:
Já jsem speciální stránka. Vím, že právě je<?phpecho date('H:i'); // Hodina:minuta?>
WARNUNG: PHP druckt nicht Ihre Zeit, sondern die Zeit des Servers. Daher kann es sein, dass Sie eine andere Zeit als die auf Ihrem Computer eingestellte Zeit erhalten.
Die Funktion wird wie üblich aufgerufen, und die einzelnen Anforderungen werden als Funktionsargumente eingegeben.
echo date('Formatierungszeichen', atribut konkrétního času);
Die Formatierungszeichen geben an, in welchem Format das Datum gedruckt wird. Zu den Zeichen können Leerzeichen, Punkte, Doppelpunkte, Bindestriche und andere Zeichen gehören, die selbst keine Formatierungszeichen sind (wenn Sie ein Formatierungszeichen verwenden wollen, müssen Sie es ausblenden). Nachstehend finden Sie eine Übersicht über die einzelnen Tags.
Das zweite (optionale) Attribut gibt das manuell eingegebene Datum oder die Uhrzeit an, das/die umgewandelt und im Format gemäß dem ersten Parameter ausgegeben wird. Sie muss als Zeitstempel angegeben werden (kann über das Formatierungskennzeichen "U" ermittelt werden).
Beispiel:
echo date('d. m. Y', 1405856605); // bis 20. 07. 2014
Zeichen | Beschreibung |
---|---|
"Y" | Jahr als vier Ziffern (z.B. 1998) |
"y" | Jahr als Doppelziffer (z.B. 98) |
"M" | Englische Abkürzung des Monatsnamens (z. B. Jan) |
"m" | Monatsnummer (01-12) |
"F" | Englischer Monatsname (z. B. Januar) |
"D" | Englische Abkürzung des Wochentags (z.B. Fri) |
"l" | englische Bezeichnung des Wochentags (z. B. Freitag) |
"N" | Nummer des Wochentags (1 - Montag, 7 - Sonntag) |
"w" | Nummer des Wochentags (0 - Sonntag, 1 - Montag, 6 - Samstag) |
"d" | Tag des Monats (01-31) |
"j" | Nummer des Tages des Monats (1-31) |
"z" | Tag des Jahres (001-365) |
"H" | Stunde (00-23) |
"h" | Stunde (01-12) |
"i" | Minute (00-59) |
"s" | Sekunde (00-59) |
"U" | Zeitstempel: Anzahl der Sekunden seit Beginn der Zeit (seit 1. Januar 1970) |
"S" | Englische Endung der Ordnungszahl des Monatstages |
"A" | AM/PM-Anzeige |
Vormittags-/Nachmittagsindikator (am/pm) | |
"P" | Differenz zur Greenwich-Zeit (GMT) mit Trennzeichen zwischen Stunden und Minuten (hinzugefügt in PHP 5.1.3), zum Beispiel: "+02:00". |
"g" | Stunde im 12-Stunden-Format (1-12) |
"G" | Stunde im 24-Stunden-Format (0-23) |
Sehr oft müssen Sie die Uhrzeit für die Datei sitemap.xml
formatieren, die das Datum und die Uhrzeit der letzten Änderung im Tag <lastmod>
enthält.
Ab PHP 5.1.3 kann dazu folgende Syntax verwendet werden:
date('Y-m-d\TH:i:sP');
Datum und Uhrzeit werden auf die Sekunde genau angezeigt und enthalten auch Informationen über die Zeitzone, in der sich der Server befindet (die Zeitzone wird vom Betriebssystem des Servers bestimmt).
Es ist nicht möglich, die tschechischen Namen der Tage und Monate in PHP auf normale Weise zu erhalten, so dass wir diese Werte selbst schreiben müssen. Am besten ist es, die Einträge in einem Array zu speichern und sie mit einem Indexaufruf abzurufen.
$mesice = [1 => 'Januar', 'Februar', 'März', 'April', 'Mai','Juni', 'Juli', 'August', 'September', 'Oktober','November', 'Dezember'];$dny = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'];
Dieses Beispiel ist ein vereinfachtes Beispiel von Jakub Vrana aus dem Artikel Tschechische Namen von Monaten und Wochentagen.
Oft haben wir ein Datum im Format Freitag, 13. September
und wollen es ins Englische übersetzen, aber wie macht man das? Am besten ist es, eine Funktion aufzurufen, zum Beispiel datumcesky()
, der wir das englische Datum übergeben und die es übersetzt.
function datumCesky(string $date): string{$men = ['Januar', 'Februar', 'März', 'April', 'Mai','Juni', 'Juli', 'August', 'September', 'Oktober','November', 'Dezember'];$mcz = ['Januar', 'Februar', 'März', 'April', 'Mai','Juni', 'Juli', 'August', 'September', 'Oktober','November', 'Dezember'];$date = str_replace($men, $mcz, $date);$den = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag','Freitag', 'Samstag', 'Sonntag'];$dcz = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag','Freitag', 'Samstag', 'Sonntag'];return str_replace($den, $dcz, $date);}
Beispiel für die Verwendung:
echo datumCesky('Freitag, 13. September'); // Freitag, 13. Dezember
Diese Funktion ist sicherlich nicht ideal für die Übersetzung, da sie nur englische Wörter durch tschechische ersetzt, aber für viele Einsätze dürfte sie ausreichend sein. Bei anspruchsvolleren Übersetzungen sollten Sie immer die genaue Syntax gewährleisten, um einen einheitlichen Stil zu gewährleisten, z. B. Freitag, 13. Dezember
.
Der erste Tag im April 2018 war ein Sonntag, aber wie kann man das leicht herausfinden?
Seit PHP 5.1.0 gibt es eine einfache Lösung:
echo date('N', strtotime('2018-04-01')); // 1 (Montag), 7 (Sonntag)
In älteren Versionen müssen wir die Funktion selbst implementieren:
/*** @Autor Jan Barášek*/function getFirstDayPosition(?int $year = null, ?int $month = null): int{$day = (int) date('w', strtotime($year . '-' . $month . '-1')) - 1;return $day < 0 ? 7 : $day + 1;}
Da der Modifikator "w" die Ausgabe im US-Format liefert, passe ich die Tageszahl noch durch eine einfache Berechnung an. Die Funktion gibt eine ganze Zahl zwischen 1 (Montag) und 7 (Sonntag) zurück.
Oft müssen wir einen relativen Zeitsprung machen (z. B. +5 Tage) oder ein Datum aus einer Texteingabe des Benutzers ziehen, damit es gültig ist. Zu diesem Zweck erlaubt die Funktion strtotime() die folgende Syntax:
echo strtotime('jetzt');echo strtotime('10. September 2000');echo strtotime('+1 Tag');echo strtotime('+1 Woche');echo strtotime('+1 Woche 2 Tage 4 Stunden 2 Sekunden');echo strtotime('nächsten Donnerstag');echo strtotime('letzten Montag');
Die Ausgabe der Funktion ist Zeitstempel (Weltzeit) der angegebenen Zeit als Ganzzahl.
Im Allgemeinen empfehle ich, diese Funktion in allen Formularen einzusetzen, in denen wir irgendwie mit der Zeit des Benutzers arbeiten. Es ist sicherlich keine gute Idee, den Benutzer zu zwingen, das Datum in einem bestimmten Format zu schreiben, sondern immer ein solches Format automatisch zu erstellen, damit der Benutzer schreiben kann, was er will. Denn oft wird der Text zum Beispiel von irgendwoher kopiert und es ist zu viel Arbeit, ihn manuell umzuformatieren, wenn dies automatisch geschehen kann.
Seit dem 1. Januar 1970 wird jede Sekunde zu einer Sekunde addiert, um eine große ganze Zahl zu erhalten, die die seither verstrichene Zeit angibt. Dies ist besonders nützlich für die einfache Berechnung von Zeitunterschieden. Diese Lösung ist recht zuverlässig, birgt aber auch Risiken (das Problem des Jahres 2038).
Allgemeine Eigenschaften dieser Notation:
Über diesem Text wird der aktuelle Zeitwert angezeigt, der jede Sekunde um +1 erhöht wird. Der aktuelle Wert wird von Javascript geladen und ist daher möglicherweise nicht immer genau (er zeigt die Systemzeit Ihres Computers an).
Computer speichern ganze Zahlen in binärer Form, und wenn es sich um eine ganze Zahl handelt, hat sie oft 32 Bits (32 Einsen und Nullen). Die höchstmögliche 32-Bit-Zahl ist: 011 111 111 111 111 111 111 111 111 11
.
Wenn wir jedoch jede Sekunde +1 zu dieser Konstante addieren, werden wir eines Tages eine solche Zahl erhalten (es wird der 19. Januar 2038 um 03:14:07 sein). Wenn wir jedoch versuchen, eine weitere 1 hinzuzufügen, reicht der Bitbereich nicht mehr aus (die Zahl wäre größer, als in 32 Bits gespeichert werden kann), so dass es zu einem Stapelüberlauf kommt, d.h. eine 1 wird an den Anfang der Zahl angehängt, was in binärer Form eine negative Zahl bedeutet (was wahrscheinlich zu einem Programmabsturz führt) und uns irgendwo im Jahr 1901 landen lässt (igitt!).
Für dieses Problem gibt es zwei Lösungen:
Ich persönlich plädiere dafür, den Datentyp DateTime
zu verwenden und auf die Speicherung ganzer Zahlen zu verzichten.
PHP ist intelligent, d.h. es versucht immer, die aktuell beste Zeitzone zu verwenden, in der sich der Server befindet. Manchmal kann es jedoch vorkommen, dass die Zeitzone nicht korrekt angegeben ist, oder wir programmieren eine globale Anwendung, auf die Benutzer aus der ganzen Welt zugreifen, und müssen daher die Zeitzone manuell ändern.
Dies kann global für das gesamte PHP-Skript durch den Aufruf einer Funktion geschehen:
date_default_timezone_set('UTC');
Gelegentlich gibt es auch diese Lösung (Feststellung, dass der Server eine andere Zeitzone als UTC hat):
$defaultTimeZone = 'UTC';if (date_default_timezone_get() != $defaultTimeZone) {date_default_timezone_set($defaultTimeZone);}
Es ist nicht PHP selbst, das für die Ermittlung des aktuellen Datums und der Uhrzeit verantwortlich ist, sondern das Betriebssystem, auf dem es läuft. Wenn Sie also die Uhrzeit manuell ändern müssen, ändern Sie sie dort.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | de