javascript - example - Convertir.NET DateTime a JSON
jira rest api authentication (10)
He estado usando este método por un tiempo:
using System;
public static class ExtensionMethods {
// returns the number of milliseconds since Jan 1, 1970 (useful for converting C# dates to JS dates)
public static double UnixTicks(this DateTime dt)
{
DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return ts.TotalMilliseconds;
}
}
Asumiendo que está desarrollando contra .NET 3.5, es una copia / pegado directo. De lo contrario puede portarlo.
Puede encapsular esto en un objeto JSON, o simplemente escribirlo en el flujo de respuesta.
En el lado de Javascript / JSON, convierte esto a una fecha simplemente pasando las marcas a un nuevo objeto Fecha:
jQuery.ajax({
...
success: function(msg) {
var d = new Date(msg);
}
}
Posible duplicado:
¿Cómo formatear una fecha JSON?
Mi servicio web está devolviendo un DateTime a una llamada jQuery. El servicio devuelve los datos en este formato:
/Date(1245398693390)/
¿Cómo puedo convertir esto en una fecha compatible con JavaScript?
Las respuestas anteriores indican que puedes hacer lo siguiente:
var d = eval(net_datetime.slice(1, -1));
Sin embargo, esto no funciona en Chrome o FF porque lo que se evalúa literalmente es:
// returns the current timestamp instead of the specified epoch timestamp
var d = Date([epoch timestamp]);
La forma correcta de hacer esto es:
var d = eval("new " + net_datetime.slice(1, -1)); // which parses to
var d = new Date([epoch timestamp]);
Lo que se devuelve es milisegundos desde la época. Podrías hacerlo:
var d = new Date();
d.setTime(1245398693390);
document.write(d);
Para saber cómo formatear la fecha exactamente como lo desea, consulte la referencia completa de la Date
en http://www.w3schools.com/jsref/jsref_obj_date.asp
Puede eliminar los no dígitos al analizar el número entero ( como se sugiere aquí ):
var date = new Date(parseInt(jsonDate.substr(6)));
O aplicando la siguiente expresión regular (de Tominator en los comentarios):
var jsonDate = jqueryCall(); // returns "/Date(1245398693390)/";
var re = /-?/d+/;
var m = re.exec(jsonDate);
var d = new Date(parseInt(m[0]));
Para analizar la cadena de fecha utilizando String.replace con referencia inversa:
var milli = "/Date(1245398693390)/".replace(///Date/((-?/d+)/)///, ''$1'');
var d = new Date(parseInt(milli));
Pensé que añadiría mi solución que he estado usando.
Si está utilizando System.Web.Script.Serialization.JavaScriptSerializer()
, el tiempo devuelto no será específico para su zona horaria. Para solucionar este problema, también querrá usar dte.getTimezoneOffset()
para volver a su hora correcta.
String.prototype.toDateFromAspNet = function() {
var dte = eval("new " + this.replace(////g, '''') + ";");
dte.setMinutes(dte.getMinutes() - dte.getTimezoneOffset());
return dte;
}
ahora solo llamarás
"/Date(1245398693390)/".toDateFromAspNet();
Viernes 19 de junio de 2009 00:04:53 GMT-0400 (Hora de verano del Este) {}
Puede probar una biblioteca de terceros como json.net Hay documentación en el sitio del proyecto. Sí dice que requiere .net 3.5.
De lo contrario, hay otro llamado Nii.json que creo que es un puerto de Java. He encontrado un enlace a este en este blog.
Si pasa un DateTime
de un código .Net a un código javascript, C #:
DateTime net_datetime = DateTime.Now;
javascript lo trata como una cadena, como "/Date(1245398693390)/"
:
Puedes convertirlo en fllowing:
// convert the string to date correctly
var d = eval(net_datetime.slice(1, -1))
o:
// convert the string to date correctly
var d = eval("/Date(1245398693390)/".slice(1, -1))
Si tiene problemas para obtener la información de tiempo, puede intentar algo como esto:
d.date = d.date.replace(''/Date('', '''');
d.date = d.date.replace('')/'', '''');
var expDate = new Date(parseInt(d.date));
la conversión de 1970,1,1 necesita el doble redondeo a cero decimales, creo
DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return Math.Round( ts.TotalMilliseconds,0);
en el lado del cliente yo uso
new Date(+data.replace(//D/g, ''''));
http://stevenlevithan.com/assets/misc/date.format.js
var date = eval(data.Data.Entity.Slrq.replace(///Date/((/d )/)///gi, "new Date($1)"));
alert(date.format("yyyy-MM-dd HH:mm:ss"));
alert(dateFormat(date, "yyyy-MM-dd HH:mm:ss"));