Gibt es eine Möglichkeit, ein JSON-Objekt in PHP zu erstellen, das ein JavaScript-Objekt date
enthält? Ändert json_encode
automatisch PHP DateTime
in Javascript date
?Kann ein von PHP zurückgegebenes JSON-Objekt ein Datumsobjekt enthalten?
Antwort
Sie könnten das Datum/die Uhrzeit als UNIX-Zeitmarke übergeben, die eine Ganzzahl ist, ein nativ unterstützter Datentyp in JSON. DateTime in PHP hat eine "getTimestamp()" -Funktion, die Ihnen diesen Wert gibt.
Kurze Antwort: Nein.
JSON ist nur Text und alle Werte sind Arrays, Objekte, Zahlen, Strings, Booleans oder Null. Das "Objekt" ist in diesem Fall im Grunde nur ein PHP-Array - es kann keine Methoden haben. Sie müssen die Daten (die Zeichenfolgen sind) manuell in Daten konvertieren.
Die formale Definition von JSON ist bei http://www.json.org/
Das JavaScript Date
Objekt nicht gültig JSON ist und nur in der freien Natur zu sehen, weil viele Menschen ihre JSON mit einer ausgewachsenen eval()
analysieren.
Eine einfache, lesbare Alternative wäre, das Datum als String in einem Format zu senden, das von Date.parse()
unterstützt wird.
Ihre JSON:
{
date: '<?php echo date("r", $myDate); ?>'
}
Ihr JavaScript:
var myDateObj = new Date(Date.parse(myJSON.date));
Quelle: http://json.org/ - Siehe den Kasten auf der rechten Seite für eine Liste gültiger JSON-Datentypen.
Ich hatte gehofft, ich es irgendwie durch 'json_encode' automatisieren konnte, wie ich ein großes assoziatives Array haben, von denen nur einige Werte (' $ Daten [i] [ "start"] ') sind Termine. – Eric
Sicher! Verwendung:
var JSONWithDate = {
"Date": new Date(<?php echo date("Y, ").(date(n) - 1).date(", j") ?>)
};
EDIT: Codebeispiel hinzufügen.
Hier ist mein Code und es funktioniert.
<html>
<body>
<script>
var J = { "Date": new Date(<?php echo date("Y, ").(date("n") - 1).date(", j") ?>) }
document.write(J["Date"]);
</script>
</body>
</html>
EDIT 2: Machen Sie es mehr wie JSON.
Hier ist mein PHP-Code.
<html>
<body>
<script>
<?php
function GetJSONDate($FieldName = "Date") {
return "\"$FieldName\": new Date(".date("Y, ").(date("n") - 1).date(", j").")";
}
?>
function PrintJSONFromPHP(pJSONStr) {
var aJSONObj = eval('('+pJSONStr+')');
document.write(aJSONObj["Date"]);
}
var aJSONStr = '{ <?php echo GetJSONDate($FieldName = "Date"); ?> }';
PrintJSONFromPHP(aJSONStr);
</script>
</body>
</html>
Es erzeugen den folgenden HTML-Code:
<html>
<body>
<script>
function PrintJSONFromPHP(pJSONStr) {
var aJSONObj = eval('('+pJSONStr+')');
document.write(aJSONObj["Date"]);
}
var aJSONStr = '{ "Date": new Date(2009, 8, 15) }';
PrintJSONFromPHP(aJSONStr);
</script>
</body>
</html>
Wenn er gestartet wird, zeigt es:
Tue Sep 15 2009 00:00:00 GMT-0600 (CST)
Wenn Sie eine Zeichenfolge übergeben kann, die wie JavaScript aussehen wörtliche Objekt (ohne Variable in ihm kann die Zeichenfolge eval sein, um zu einem Objekt gedreht zu werden. Dies bedeutet, dass Sie es als JSON verwenden können.
Hoffe, das hilft.
Ihr Beispiel funktioniert vielleicht, aber es ist JavaScript und nicht JSON. –
Entschuldigung für meine Unwissenden, aber ich verstehe nicht, was "JavaScript und nicht JSON" bedeutet. JSON ist eine Art JavaScript-Objektliteral, das ebenso relevant ist wie Erwähnung. Sehen Sie meine Bearbeitung (ich sehe einen Code, der es eher wie JSON aussehen lässt), aber die Idee ist genau die gleiche. – NawaMan
Siehe http://json.org/, wo Sie die vollständige Spezifikation finden können. Eine Schlüsselzeile aus der Zusammenfassung: "JSON ist ein Textformat, das vollständig sprachunabhängig ist, aber Konventionen verwendet, die Programmierern der C-Familie von Sprachen bekannt sind, einschließlich C, C++, C#, Java, JavaScript, Perl, Python und viele andere." –
Während ich @postfuturist antworte, gibt es eine Alternative: Reguläre Expression mit syntaktischem Zucker.
$json_data = json_encode(['test' => '__' . $_SERVER['REQUEST_TIME']]);
$json_data = preg_replace_callback('/"__([0-9]{10})"/u', function ($e) {
return 'new Date(' . ($e[1] * 1000) . ')';
}, $json_data);
Welche produzieren würde:
string(32) "{"test":new Date(1385820141000)}"
oder
Object {test: Sat Nov 30 2013 14:02:21 GMT+0000 (GMT)}
wenn JSON-Daten sind in JavaScript behandelt werden.
Dies würde die meisten Anwendungsfälle abdecken (beachten Sie, dass UNIX-Timestamp nicht unbedingt 10 Zeichen lang ist). Wenn es in der Produktion verwendet wird, sollte mehr syntaktischer Zucker verwendet werden, um ein versehentliches Ersetzen des Wertes zu verhindern.
Dies sollte nur verwendet werden, wenn JSON zum Zeitpunkt des Ladens der Seite und nicht über XHR, z.
<html>
<head>
<script>
var myData = <?=$json_data?>;
</script>
</head>
<body>
</body>
</html>
Dies wäre kein gültiger JSON? Es wäre aber Javascript gültig. Korrigiere mich, wenn ich falsch liege –
- 1. Kann ein Sass Selector ein '%' Zeichen enthalten?
- 2. Wie kann ich ein normales Javascript-Datumsobjekt zurückgeben?
- 3. Wie erstellt man ein NSDate-Datumsobjekt?
- 4. AngularJs: Wie übersetzt man ein Datumsobjekt?
- 5. Kann ein ListView Fragmente enthalten
- 6. Muss ich ein zurückgegebenes NSError-Objekt freigeben?
- 7. wie ein PHP-Header in HTML enthalten
- 8. Sortierung ein Array enthalten Daten in PHP
- 9. Der effizienteste Weg, ein zurückgegebenes Array zu indizieren?
- 10. Ajax - Wie man ein zurückgegebenes Array in einer Erfolgsfunktion verwendet
- 11. Kann nicht ein Array von PHP passieren
- 12. Kann ein AAR transitive Abhängigkeiten enthalten?
- 13. Kann ein Facebook-Plugin Leckprofilinformationen enthalten?
- 14. Kann ein SVG Audio mit Javascript enthalten?
- 15. Kann ein RhinoMock-Mock Eigenschaftenwerte enthalten?
- 16. Gibt es eine Funktion oder ein Paket, das Vorhersagen für ein von lm() zurückgegebenes Objekt simuliert?
- 17. Kann ein std :: string eingebettete Nullen enthalten?
- 18. Kann ein WebSetup mehrere Webanwendungen enthalten?
- 19. Kann ein Funktionskonstruktor eine Nicht-Variable enthalten?
- 20. Wo ein Captcha enthalten?
- 21. Wie wird ein Array von Datumskomponenten in ein JavaScript-Datumsobjekt umgewandelt? So
- 22. Wie ein Regex in ein Array von Strings enthalten?
- 23. Wie ist es möglich, ein konstant zurückgegebenes Objekt zu bewegen?
- 24. Warum konvertiert Javascript/typescript implizit ein Datumsobjekt in eine Zeichenfolge?
- 25. Wie strikte ich ein Datumsobjekt in einem anderen Gebietsschema?
- 26. So konvertieren Sie eine Datumszeichenkette in ein Datumsobjekt ohne Zeitzone
- 27. Wie wird ein Fehler ausgelöst, wenn ein ungültiges Datumsobjekt erstellt wird?
- 28. Kann ich ein Datumsobjekt erstellen, in dem das Jahr nicht anwendbar ist?
- 29. Datumsstring in ein Datumsobjekt konvertieren, so dass es mit dem Moment verwendet werden kann
- 30. Wie kann ich ein Datumsobjekt in MySQL zum Ende des Monats runden?
Und Sie würden alle Zeitzoneninformationen verlieren. Definitiv keine akzeptable Antwort in einer App mit mehreren Zeitzonen. –