2009-09-15 3 views

risposta

9

È possibile passare la data e l'ora come data/ora UNIX che è un numero intero, un tipo di dati supportato in modo nativo in JSON. DateTime in PHP ha una funzione "getTimestamp()" che ti darà quel valore.

+4

E si perderebbero tutte le informazioni sul fuso orario. Sicuramente non è la risposta accettabile in un'app plurale a fuso orario. –

1

Risposta breve: no.

JSON è solo testo e tutti i valori sono matrici, oggetti, numeri, stringhe, booleani o null. L '"oggetto" in questo caso è fondamentalmente solo un array PHP - non può avere metodi. È necessario convertire manualmente le date (che saranno stringhe) in Date.

La definizione formale di JSON è a http://www.json.org/

13

L'oggetto JavaScript Date non è valido e JSON è visto solo in natura, perché un sacco di gente analizza loro JSON con una conclamata eval().

Un'alternativa facile, leggibile dall'uomo, sarebbe quella di inviare la data come stringa in un formato supportato da Date.parse().

tuo JSON:

{ 
    date: '<?php echo date("r", $myDate); ?>' 
} 

tuo JavaScript:

var myDateObj = new Date(Date.parse(myJSON.date)); 

Fonte: http://json.org/ - Vedi il riquadro a destra per un elenco dei tipi di dati JSON validi.

+0

Speravo potessi in qualche modo automatizzare attraverso 'json_encode' come ho un grande array associativo di cui solo alcuni valori (' $ date [i] [ "start"] ') sono date. – Eric

-8

Sicuro! Utilizzare:

var JSONWithDate = { 
    "Date": new Date(<?php echo date("Y, ").(date(n) - 1).date(", j") ?>) 
}; 

MODIFICA: aggiungere un esempio di codice.

Ecco il mio codice e FUNZIONA.

<html> 
<body> 
<script> 
var J = { "Date": new Date(<?php echo date("Y, ").(date("n") - 1).date(", j") ?>) } 
document.write(J["Date"]); 
</script> 
</body> 
</html> 

MODIFICA 2: renderlo più simile a JSON.

Ecco il mio codice PHP.

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

Si genera il seguente codice HTML:

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

Quando run, si vede:

Tue Sep 15 2009 00:00:00 GMT-0600 (CST) 

Se è possibile passare una stringa che assomigliano JavaScript Object letterale (senza l'utilizzo di variabili al suo interno), la stringa può essere valutata per essere trasformata in un oggetto. Ciò significa che puoi usarlo come JSON.

Spero che questo aiuti.

+2

L'esempio potrebbe funzionare, ma è JavaScript e non JSON. –

+0

Scusate per il mio ignorante ma non riesco a vedere cosa significhi "è JavaScript e non JSON". JSON è una sorta di oggetto JavaScript letterale che è altrettanto ovvio di quanto lo sia. Vedi la mia modifica (vedo un codice che lo fa sembrare più simile a JSON) ma l'idea è esattamente la stessa. – NawaMan

+1

Fare riferimento a http://json.org/, dove è possibile trovare la specifica completa. Una linea chiave del riassunto: "JSON è un formato di testo che è completamente indipendente dal linguaggio, ma utilizza convenzioni familiari ai programmatori della famiglia di linguaggi C, inclusi C, C++, C#, Java, _JavaScript_, Perl, Python e molti altri." –

1

Mentre sono d'accordo con la risposta @postfuturist, c'è un'alternativa: espressione regolare con zucchero sintattico.

$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); 

che produrrebbe:

string(32) "{"test":new Date(1385820141000)}" 

o

Object {test: Sat Nov 30 2013 14:02:21 GMT+0000 (GMT)} 

se i dati JSON è stato quello di essere gestito in JavaScript.

Ciò coprirebbe la maggior parte dei casi di utilizzo (si noti che la data/ora UNIX non è necessariamente lunga 10 caratteri). Se usato in produzione, dovrebbe essere usato più zucchero sintattico per prevenire la sostituzione accidentale del valore.

Questo dovrebbe essere usato solo quando JSON è iniettato al tempo di caricamento della pagina, piuttosto che tramite XHR, ad es.

<html> 
<head> 
<script> 
var myData = <?=$json_data?>; 
</script> 
</head> 
<body> 
</body> 
</html> 
+0

Questo non sarebbe valido JSON? Sarebbe valido Javascript però. Correggimi se sbaglio –