¿Hay alguna manera de crear un objeto JSON en PHP que contenga un objeto javascript date
? ¿json_encode
automáticamente convierte PHP DateTime
a Javascript date
?¿Puede un objeto JSON devuelto por PHP contener un objeto de fecha
Respuesta
Puede pasar la fecha/hora como una marca de tiempo UNIX que es un número entero, un tipo de datos compatible nativamente en JSON. DateTime en PHP tiene una función "getTimestamp()" que le dará ese valor.
Respuesta corta: no.
JSON es solo texto, y todos los valores son matrices, objetos, números, cadenas, booleanos o nulo. El "objeto" en este caso es básicamente una matriz PHP, no puede tener métodos. Necesita convertir manualmente las fechas (que serán cadenas) en Fechas.
La definición formal de JSON es en http://www.json.org/
El objeto JavaScript Date
JSON no es válida y que sólo se ve en la naturaleza debido a que una gran cantidad de personas analizar su JSON con un eval()
en toda regla.
Una alternativa fácil y legible para los humanos sería enviar la fecha como una cadena en un formato compatible con Date.parse()
.
Su JSON:
{
date: '<?php echo date("r", $myDate); ?>'
}
Tienes JavaScript:
var myDateObj = new Date(Date.parse(myJSON.date));
Fuente: http://json.org/ - Véase el recuadro de la derecha para obtener una lista de tipos de datos JSON válidos.
Tenía la esperanza de que de alguna manera podría automatizar a través de 'json_encode' ya que tengo una gran matriz asociativa de los cuales sólo algunos valores (fechas' $ [i] [ "Inicio"] ') son fechas. – Eric
¡Seguro! Uso:
var JSONWithDate = {
"Date": new Date(<?php echo date("Y, ").(date(n) - 1).date(", j") ?>)
};
EDITAR: Agregar código de ejemplo.
Aquí está mi código y FUNCIONA.
<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: Haz que sea más como JSON.
Aquí está mi código 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>
Se genera el código HTML siguiente:
<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>
Cuando se ejecuta, muestra:
Tue Sep 15 2009 00:00:00 GMT-0600 (CST)
Si usted puede pasar una cadena que se parecen a JavaScript objeto literal (sin utilizar variables dentro de ella), la cadena puede ser evaluada para convertirla en un objeto. Esto significa que puede usarlo como JSON.
Espero que esto ayude.
Su ejemplo puede funcionar, pero es JavaScript y no JSON. –
Lo siento por mi ignorante pero no veo qué significa "es JavaScript y no JSON". JSON es un tipo de objeto de JavaScript literal que, como evaluación, es estimulante. Vea mi edición (veo un código que lo hace parecer más a JSON) pero la idea es exactamente la misma. – NawaMan
Consulte http://json.org/, donde puede encontrar la especificación completa. Una línea clave del resumen: "JSON es un formato de texto que es __completamente independiente del lenguaje__ pero utiliza convenciones que son familiares para los programadores de la familia C de idiomas, incluidos C, C++, C#, Java, _JavaScript_, Perl, Python y muchos otros." –
Aunque estoy de acuerdo con la respuesta de @postfuturist, existe una alternativa: expresión regular con azúcar sintáctico.
$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);
que produciría:
string(32) "{"test":new Date(1385820141000)}"
o
Object {test: Sat Nov 30 2013 14:02:21 GMT+0000 (GMT)}
si los datos JSON era para ser manipulados en JavaScript.
Esto cubriría la mayoría de los casos de uso (tenga en cuenta que la marca de tiempo UNIX no tiene necesariamente 10 caracteres). Si se usa en producción, se debe usar azúcar más sintáctica para evitar el reemplazo accidental del valor.
Esto debe usarse solo cuando se inyecta JSON en el tiempo de carga de la página, en lugar de a través de XHR, p.
<html>
<head>
<script>
var myData = <?=$json_data?>;
</script>
</head>
<body>
</body>
</html>
Esto no sería válido JSON? Sin embargo, sería válido Javascript. Corrígeme si estoy equivocado –
- 1. PHP/JSON - stdClass Objeto
- 2. objeto JSON por atributos
- 3. ¿Debo liberar un objeto NSError devuelto?
- 4. cómo convertir un json a un objeto php en symfony2?
- 5. Aplanar un objeto json anidado
- 6. Devolviendo un objeto JSON de PHP en una llamada AJAX?
- 7. Serializar un objeto a JSON
- 8. Mockito: tropezar con un método de un objeto que fue devuelto por un método de objeto simulado
- 9. Manejo de datos en un objeto PHP JSON
- 10. ObjC: objeto devuelto descripción vacía?
- 11. de cómo extraer un objeto JSON que está dentro de un objeto JSON
- 12. Ordenación de un objeto JSON en Javascript
- 13. No se puede asignar un objeto a un objeto volátil
- 14. Decode escasa JSON objeto de matriz PHP
- 15. Serializar/deserializar objeto-gráfico PHP a JSON
- 16. ¿Cómo crear un objeto de fecha NSDate?
- 17. Crear un objeto Json en javascript
- 18. Iterando a través de un objeto JSON
- 19. acceso JSON nombre del objeto en PHP
- 20. PHP: Cuente un objeto stdClass
- 21. WPF: ¿Puede un Visual contener hijos?
- 22. ¿Cómo agregar valores a un objeto JSON?
- 23. DefaultModelBinder no puede deserializar el objeto .NET Dictionary pasado a una acción como un objeto JSON?
- 24. php - restablecer/borrar un objeto?
- 25. ¿Puede un objeto ser falso?
- 26. Cómo analizar un objeto json usando jquery
- 27. Usar el objeto JSON devuelto por una URL en los raíles
- 28. ¿Serializar un objeto a JSON, XML, YAML?
- 29. ¿Puede un ListView contener fragmentos
- 30. cómo convertir un valor hash devuelto desde un date_select en rieles a un objeto Date?
Y perdería toda la información de la zona horaria. Definitivamente no es la respuesta aceptable en una aplicación de zona horaria plural. –