recorrer objeto mostrar ejemplo datos convertir array javascript json datetime

mostrar - ¿Cómo se analiza JSON para recibir un objeto Date en JavaScript?



recorrer objeto json javascript (16)

AngularJS no pudo analizar .NET JSON fecha /Date(xxxxxxxxxxxxx)/ cadena ya sea ..

Dejé de lado este problema formateando la fecha en su representación de cadena ISO 8601 en lugar de volcar el objeto Date directamente ...

Aquí hay una muestra del código ASP.NET MVC ..

return Json(new { date : DateTime.Now.ToString("O") //ISO 8601 Angular understands this format });

Intenté RFC 1123 pero no funciona. Angular lo trata como una cadena en lugar de Date.

return Json(new { date : DateTime.Now.ToString("R") //RFC 1123 Angular won''t parse this });

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 que estoy enfrentando 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 (muchos que contienen errores).

Es difícil creer que no hay una solución elegante, ya que todo esto está en JavaScrip, quiero decir código JavaScript que intenta leer JSON (JavaScript Object Notation) que se supone que es un código JavaScript y en este momento resulta que no es porque JavaScript no puede hacer un buen trabajo aquí.

También he visto algunas soluciones de evaluación que no pude hacer funcionar (además de ser señalado como una amenaza a la seguridad).

¿Realmente no hay manera de hacerlo de una manera elegante?

Pregunta similar sin una respuesta real:
Cómo analizar el formato de fecha de ASP.NET JSON con GWT


Como Callum mencionó, para mí, la mejor manera es cambiar el método del Controlador a cadena en lugar de JsonResult ".

public string GetValues() { MyObject.DateFrom = DateTime.Now; return JsonConvert.SerializeObject(MyObject); }

Desde el método ajax puedes hacer algo como esto

$.ajax({ url: "/MyController/GetValues", type: "post", success: function (data) { var validData = JSON.parse(data); //if you are using datepicker and you want set a format $("#DateFrom").val($.datepicker.formatDate("dd/mm/yy", new Date(validData.DateFrom))); // if you want the date as returned $("#DateFrom").val(new Date(validData.DateFrom)) } });


El uso de la función eval solo tiene que eliminar la barra frontal al frente y atrás.

var date1 = "/Date(25200000)/" eval("new " + date1.substring(1, date1.length - 1));

yield Thu ene 01 1970 00:00:00 GMT-0700 (hora estándar de la montaña de EE. UU.)


Esta respuesta de Roy Tinker aquí :

var date = new Date(parseInt(jsonDate.substr(6)));

Como él dice: La función substr saca la parte "/ Fecha (", y la función parseInt obtiene el número entero e ignora el ") /" al final. El número resultante se pasa al constructor de Fecha.

Otra opción es simplemente formatear su información correctamente en el lado de ASP para que JavaScript pueda leerla fácilmente. Considere hacer esto para sus fechas:

DateTime.Now()

Que debería devolver un formato como este:

7/22/2008 12:11:04 PM

Si pasa esto a un constructor de Date JavaScript como este:

var date = new Date(''7/22/2008 12:11:04 PM'');

La date variable ahora tiene este valor:

Tue Jul 22 2008 12:11:04 GMT-0700 (Pacific Daylight Time)

Naturalmente, puede formatear este objeto DateTime en cualquier tipo de cadena / int que acepte el constructor de JS Date .


La función JSON.parse acepta una función reviver DateTime opcional. Puedes usar una función como esta:

dateTimeReviver = function (key, value) { var a; if (typeof value === ''string'') { a = ///Date/((/d*)/)///.exec(value); if (a) { return new Date(+a[1]); } } return value; }

Luego llame

JSON.parse(somejsonstring,dateTimeReviver)

Y tus citas saldrán bien


La respuesta a esta pregunta es, use nuget para obtener JSON.NET y luego use esto dentro de su método JsonResult :

JsonConvert.SerializeObject(/* JSON OBJECT TO SEND TO VIEW */);

Dentro de su vista simple, haga esto en javascript :

JSON.parse(/* Converted JSON object */)

Si se trata de una llamada ajax:

var request = $.ajax({ url: "@Url.Action("SomeAjaxAction", "SomeController")", dataType: "json"}); request.done(function (data, result) { var safe = JSON.parse(data); var date = new Date(safe.date); });

Una vez que se ha JSON.parse , puede poner la fecha JSON en una new Date instancia de new Date porque JsonConvert crea una instancia de tiempo ISO adecuada


Las fechas son siempre una pesadilla. Respondiendo a su vieja pregunta, tal vez esta sea la manera más elegante:

eval(("new " + "/Date(1455418800000)/").replace(////g,""))

Con eval convertimos nuestra cadena a código javascript. Luego eliminamos el "/", en la función de reemplazo es una expresión regular. Como comenzamos con algo nuevo, nuestras oraciones superarán esto:

new Date(1455418800000)

Ahora, una cosa que empecé a usar hace mucho tiempo, son los valores largos que se representan en tics ... ¿por qué? bueno, la localización y dejar de pensar en cómo se configura la fecha en cada servidor o cada cliente. De hecho, lo uso también en las bases de datos.

Tal vez sea bastante tarde para esta respuesta, pero puede ayudar a cualquiera por aquí.


No hay una representación JSON estándar de las fechas. Debería hacer lo que @jAndy sugirió y no serializar un DateTime ; solo envíe una cadena de fecha RFC 1123 ToString("r") o un número de segundos desde Unix-epoch, u otra cosa que pueda usar en JavaScript para construir una Date .


No he usado .Net para cosas como esta. Si pudieras lograr que imprima algo como el siguiente, debería funcionar.

Tenga en cuenta que, a menos que esté analizando esa cadena JSON de otra manera o solo espere que los usuarios tengan navegadores modernos con un analizador JSON integrado, necesita usar un marco JS o JSON2 para analizar la cadena JSON producida por el servidor en un JSON real. objeto.

// JSON received from server is in string format var jsonString = ''{"date":1251877601000}''; //use JSON2 or some JS library to parse the string var jsonObject = JSON.parse( jsonString ); //now you have your date! alert( new Date(jsonObject.date) );

Enlace Wiki

Los navegadores modernos, como Firefox 3.5 e Internet Explorer 8, incluyen características especiales para analizar JSON. Como el soporte nativo del navegador es más eficiente y seguro que eval (), se espera que el soporte nativo JSON se incluya en el próximo estándar ECMAScript. [6]

Enlace al archivo JSON2

Ejemplo en vivo


Puede convertir la fecha JSON al formato de fecha normal en JavaScript.

var date = new Date(parseInt(jsonDate.substr(6)));


Qué hay de malo en:

new Date(1293034567877);

Esto vuelve para mí "Mié 22 de diciembre de 2010 16:16:07 GMT + 0000 (hora estándar GMT)".

¿O necesitas sacar el número del JSON?


Sé que este es un hilo muy antiguo, pero deseo publicarlo para ayudar a aquellos que se topan con esto como yo.

si no te importa utilizar un script de terceros, puedes usar el moment,js Luego puedes usar .format () para formatearlo en cualquier cosa que desees.


si usa el estilo de JavaScript ISO8601 en JSON, puede usar esto desde MDN

var jsonDate = (new Date()).toJSON(); var backToDate = new Date(jsonDate); console.log(jsonDate); //2015-10-26T07:46:36.611Z


// // formats a .net date into a javascript compatible date // function FormatJsonDate(jsonDt) { var MIN_DATE = -62135578800000; // const var date = new Date(parseInt(jsonDt.substr(6, jsonDt.length-8))); return date.toString() == new Date(MIN_DATE).toString() ? "" : (date.getMonth() + 1) + "//" + date.getDate() + "//" + date.getFullYear(); }


function parseJsonDate(jsonDate) { var fullDate = new Date(parseInt(jsonDate.substr(6))); var twoDigitMonth = (fullDate.getMonth() + 1) + ""; if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth; var twoDigitDate = fullDate.getDate() + ""; if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate; var currentDate = twoDigitMonth + "/" + twoDigitDate + "/" + fullDate.getFullYear(); return currentDate; };


function parseJsonDate(jsonDate) { var fullDate = new Date(parseInt(jsonDate.substr(6))); var twoDigitMonth = (fullDate.getMonth() + 1) + ""; if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth; var twoDigitDate = fullDate.getDate() + ""; if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate; var currentDate = twoDigitMonth + "/" + twoDigitDate + "/" + fullDate.getFullYear(); return currentDate; };

// Usa esta función

var objDate=parseJsonDate("//Date(1443812400000)//"); alert(objDate);