2009-09-15 16 views

Antwort

9

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.

+4

Und Sie würden alle Zeitzoneninformationen verlieren. Definitiv keine akzeptable Antwort in einer App mit mehreren Zeitzonen. –

1

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/

13

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.

+0

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

-8

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.

+2

Ihr Beispiel funktioniert vielleicht, aber es ist JavaScript und nicht JSON. –

+0

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

+1

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." –

1

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> 
+0

Dies wäre kein gültiger JSON? Es wäre aber Javascript gültig. Korrigiere mich, wenn ich falsch liege –

Verwandte Themen