2017-04-27 3 views
0

Ich habe eine Benutzereingabe in Web-Formular in HTML5 type="date" Feld. Dann wird dieser eingegebene Wert (zusammen mit anderen) als JSON-Dokument in der MySQL-Datenbank gespeichert. Jetzt muss ich dieses Datum extrahieren und es in ein generiertes MS Word-Dokument mit einem bestimmten Format drucken. Groß! Aber wie Sie wissen HTML5 Datumsfeld akzeptiert Datumsformat abhängig von Benutzer Gebietsschemata, Einstellungen usw. Ich habe festgestellt, dass alle in verschiedenen Browsern eingegebenen Daten in DB im "Y-m-d" -Format gespeichert sind. Ist das wirklich in allen Fällen so? Kann ich mich auf dieses Format für die zukünftige Verwendung verlassen? Konnte keine Spezifikationsinformationen zu dem Thema finden. Wenn man nicht auf "Y-m-d" -Format verlassen kann, gibt es irgendwelche PHP-Bibliotheken für "raten" Datumsformat?Erraten Datumsformat mit PHP

Antwort

1

Erstens, warum speichern Sie JSON-Dokument in MySQL-Datenbank statt einer geeigneteren Dokumentendatenbank (z. B. MongoDB)?

Wie auch immer, basierend auf this und this weicht das angezeigte Datumsformat vom tatsächlichen Wert ab. Der Datumswert in der HTTP-Anfrage wird immer als yyyy-mm-dd formatiert, welches das ISO 8601 Format ist und ich denke, es sollte zuverlässig sein.

In PHP können Sie Datumszeichenfolgen mit der Klasse DateTime verarbeiten. Diese Klasse unterstützt viele verschiedene Datumsformate. Zum Beispiel:

// timezone is set based on your system preferences if not set 
$date1 = new DateTime('2017-04-27', new DateTimeZone('+00:00')); 
$date2 = new DateTime('27 April 2017', new DateTimeZone('+00:00')); 
$date3 = new DateTime('2017-04-27T00:00:00+00:00'); 

var_dump($date1 == $date2); // bool(true) 
var_dump($date1 == $date3); // bool(true) 

Wenn das Datum Zeichenfolge falsch ist, wird eine Ausnahme ausgelöst:

try { 
    $date = new DateTime('2017 4 27'); 
} catch (Exception $e) { 
    echo $e->getMessage(); // DateTime::__construct(): Failed to parse time string (2017 4 27) at position 5 (4): Unexpected character 
} 

in Ihrem Fall So können Sie Sie diese Klasse für Datum Validierung und als richtige Ausgabeformatierung, zB:

$dateString = '2017-04-27T14:22:11+00:00'; 
try { 
    $date = new DateTime($dateString); 
    echo $date->format('Y-m-d'); // 2017-04-27 
} catch (Exception $e) { 
    // do something else 
} 
+0

Danke, Lukas, für MDN und Google Developers. Sieht so aus, als hätte ich zu wenig gegoogelt, um selbst eine Antwort zu finden. Der wichtigste Teil ist, dass die Anfrage immer in JJJJ-MM-TT-Form gesendet wird. – erop

+0

Meine ganze Anwendung ist MySQL-abhängig. Aber ich muss dynamische Formulare für die Eingabe von Dokumentenattributen erstellen. Neue JSON-Typenfelder, die in MySQL 5.7.6 gestartet wurden, helfen mir sehr bei der Erweiterung der App-Funktionalität. – erop