Warum gibt strtotime ('x') das Datum von morgen zurück?

8

Ich kann das nicht verstehen - warum passiert Folgendes?

%Vor%

ODER nur die strtotime Funktion

zurückgeben %Vor%

Diese Werte kamen von einigen Tests, die ich gerade machte, um herauszufinden, wie / warum bestimmte Werte von einer bestimmten Funktion zurückgegeben wurden.

Es bewirkt, dass meine Funktion fehlschlägt - weil Sie annehmen würden, dass "a" (oder ein einzelnes Zeichen) als falsches falsches Datum zurückgegeben wird.

    
Laurence 03.09.2012, 12:58
quelle

2 Antworten

7

Sowohl einzelne als auch doppelte Zeichen werden als Zeitzonen interpretiert (Tabelle "verwendete Symbole") Zeile "tz"); sechs Ziffern werden interpretiert als HHMMII (Tabelle "24-Stunden-Notation", Zeile " Stunde, Minuten und Sekunden, kein Doppelpunkt ").

Gültige Formate

Im ersten und dritten Fall, in dem das Parsing erfolgreich ist, gibt strtotime einen Zeitstempel zurück, und date gibt das Datum aus, dem es entspricht. Es ist offensichtlich, warum der erste Fall erfolgreich ist; Denken Sie für den dritten Fall daran, dass militärische Zeitzonen mit einem einzigen Buchstaben bezeichnet werden können, und dann sind die Ergebnisse sinnvoll. Folgen Sie diesem Code :

%Vor%

Dies druckt

%Vor%

Sie können die Kontinuität sehen, wenn wir von einer Zeitzone zur nächsten gehen; die Diskontinuität für die Zeitzone 'j' , die nicht existiert (hier schlägt das Parsing mit den gleichen Ergebnissen fehl, wie unten erklärt); die Diskontinuität bei Zeitzone 'n' , wo wir uns von UTC + 12 nach UTC-1 usw. bewegen.

Ungültige Formate

Im zweiten und vierten Fall schlägt das Parsen fehl, strtotime gibt false zurück und dies hat denselben Effekt, als hätten Sie date("d-m-Y", 0) aufgerufen - es formatiert den Beginn der Epoche (1. Januar 1970, 00:00 Uhr) : 00). Dies geschieht, weil false in die Ganzzahl 0 gemäß normalem Jonglierregeln eingeben .

Was bringt strtotime('x') wirklich zurück?

Er gibt die aktuelle Zeit in der Zeitzone UTC-11 (das ist die militärische Zeitzone "x-ray") zurück. Abhängig von Ihrer lokalen Zeit und Zeitzone ist dies in der Regel entweder "heute" oder "morgen" aus Ihrer Sicht. Wenn Sie zu weniger als UTC-11 sind, dann könnte es sogar "gestern" sein (obwohl das ist nicht sehr wahrscheinlich ).

    
Jon 03.09.2012, 13:11
quelle
3
  • 214454 wird als Stunde: Minute: Sekunde
  • behandelt
  • 333333 es liegt daran, dass es keine 33 Stunden gibt
Peter 03.09.2012 13:05
quelle

Tags und Links