Tengo una siguiente pieza de JSON:
\/Date(1293034567877)\/
que es el resultado de este código .NET:
var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();
Ahora, el problema al que me enfrento es cómo crear un objeto Date a partir de esto en JavaScript. Todo lo que pude encontrar fue una increíble solución de expresiones regulares (muchas contenían errores).
Es difícil creer que no hay una solución elegante ya que todo esto está en JavaScrip, me refiero al código JavaScript que intenta leer JSON (notación de objetos JavaScript) que se supone que es un código JavaScript y en este momento resulta que no es porque JavaScript no puede haz un buen trabajo aquí.
También he visto algunas soluciones de evaluación que no pude hacer funcionar (además de ser señaladas como una amenaza para la seguridad).
¿Realmente no hay forma de hacerlo de una manera elegante?
Pregunta similar sin respuesta real:
Cómo analizar el formato de fecha JSON de ASP.NET con GWT
fuente
new Date()
.Respuestas:
No hay una representación JSON estándar de fechas. Debes hacer lo que sugirió @jAndy y no serializar
DateTime
en absoluto; simplemente envíe una cadena de fecha RFC 1123ToString("r")
o un número de segundos de Unix-epoch, o algo más que pueda usar en JavaScript para construir unDate
.fuente
La
JSON.parse
función acepta una función de reactivación de fecha y hora opcional. Puedes usar una función como esta:Luego llame
Y tus citas saldrán bien.
fuente
Esta respuesta de Roy Tinker aquí :
Como él dice: La función substr saca la parte "/ Date (", y la función parseInt obtiene el número entero e ignora el ") /" al final. El número resultante se pasa al constructor Date.
Otra opción es simplemente formatear su información correctamente en el lado ASP de modo que JavaScript pueda leerla fácilmente. Considere hacer esto para sus citas:
Que debería devolver un formato como este:
Si pasa esto a un
Date
constructor de JavaScript como este:La variable
date
ahora tiene este valor:Naturalmente, puede formatear este
DateTime
objeto en cualquier tipo de cadena / int queDate
acepte el constructor JS .fuente
si usa la fecha ISO8601 de estilo JavaScript en JSON, puede usar esto, de MDN
fuente
Puede convertir JSON Date al formato de fecha normal en JavaScript.
fuente
Qué hay de malo en:
Esto me devuelve "Miércoles 22 de diciembre de 2010 16:16:07 GMT + 0000 (hora estándar GMT)".
¿O necesitas sacar el número del json?
fuente
\/Date(1293034567877)\/
. Si estuviera cuerdo, solo generaría un tiempo de época y podría inicializar un objeto Date con eso.Sé que este es un hilo muy antiguo, pero deseo publicarlo para ayudar a aquellos que se encuentran con esto como lo hice yo.
Si no le importa usar un script de terceros, puede usar moment, js Luego puede usar .format () para formatearlo a lo que quiera.
fuente
Las citas siempre son una pesadilla. Respondiendo a tu vieja pregunta, quizás esta sea la forma más elegante:
Con eval convertimos nuestra cadena a código javascript. Luego eliminamos la "/", en la función de reemplazo hay una expresión regular. Cuando comenzamos con nuevo, nuestras oraciones superarán esto:
Ahora, una cosa que comencé a usar hace mucho tiempo, son los valores largos que están representados en ticks ... ¿por qué? bueno, localización y deja de pensar en cómo se configura la fecha en cada servidor o en cada cliente. De hecho, también lo uso en bases de datos.
Quizás sea bastante tarde para esta respuesta, pero puede ayudar a cualquiera por aquí.
fuente
AngularJS tampoco pudo analizar la
/Date(xxxxxxxxxxxxx)/
cadena de fecha JSON de .NET .Dejé de lado este problema formateando la fecha a su representación de cadena ISO 8601 en lugar de descargar el
Date
objeto directamente ...Aquí hay una muestra de código ASP.NET MVC.
Lo intenté
RFC 1123
pero no funciona. Angular trata esto como una cadena en lugar de Date.fuente
No he usado .Net para cosas como esta. Si pudo hacer que imprima algo como lo siguiente, debería funcionar.
Tenga en cuenta que, a menos que esté analizando esa cadena JSON por algún otro medio o solo espere que los usuarios tengan navegadores modernos con un analizador JSON integrado, debe usar un marco JS o JSON2 para analizar la cadena JSON generada por el servidor en un JSON real. objeto.
Enlace Wiki
Enlace al archivo JSON2
Ejemplo en vivo
fuente
La respuesta a esta pregunta es, use nuget para obtener JSON.NET y luego use esto dentro de su
JsonResult
método:dentro de su vista simple haga esto en
javascript
:Si es una llamada ajax:
Una vez que
JSON.parse
se ha llamado, puede poner la fecha JSON en unanew Date
instancia porqueJsonConvert
crea una instancia de tiempo ISO adecuadafuente
fuente
Como mencionó Callum, para mí, la mejor manera es cambiar el método Controller a string en lugar de JsonResult ".
Desde el método ajax puedes hacer algo como esto
fuente
El uso de la función eval funciona solo tiene que eliminar la barra inclinada en la parte delantera y trasera.
produce el jueves 01 de enero de 1970 00:00:00 GMT-0700 (hora estándar de las montañas de EE. UU.)
fuente
Me encontré con un problema con la API externa que proporciona fechas en este formato, algunas veces incluso con información de diferencia UTC como
/Date(123232313131+1000)/
. Pude convertirlo en unDate
objeto js con el siguiente códigofuente
fuente
// Usa esta función
fuente