¿Cómo debo convertir el objeto de fecha de JavaScript en ticks? Quiero usar los ticks para obtener la fecha exacta de mi aplicación C # después de la sincronización de datos.
Respuestas:
Si desea convertir su DateTimeobjeto en ticks universales, utilice el siguiente fragmento de código:
var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);
Hay 10000 tics en un milisegundo. Y 621.355.968.000.000.000 garrapatas entre 1 st Ene 0001 y el 1 er enero 1970.
El Dateorigen del tipo de JavaScript es la época de Unix: la medianoche del 1 de enero de 1970.
El DateTimeorigen del tipo .NET es la medianoche del 1 de enero de 0001.
Puede traducir un Dateobjeto JavaScript a .NET ticks de la siguiente manera:
var yourDate = new Date(); // for example
// the number of .net ticks at the unix epoch
var epochTicks = 621355968000000000;
// there are 10000 .net ticks per millisecond
var ticksPerMillisecond = 10000;
// calculate the total number of .net ticks for your date
var yourTicks = epochTicks + (yourDate.getTime() * ticksPerMillisecond);
(621355968e9 + (new Date()).getTime() * 1e4)condensa estas 4 líneas una vez que tenga la comprensión. Gran participación @LukeH
Si por "ticks" te refieres a "milisegundos desde la época", puedes llamar a ".getTime ()".
var ticks = someDate.getTime();
De la documentación de MDN , el valor devuelto es un
Valor entero que representa el número de milisegundos desde el 1 de enero de 1970 a las 00:00:00 UTC (época de Unix).
Ampliando la respuesta aceptada como por qué 635646076777520000se agrega.
Javascript new Date().getTime() or Date.now()devolverá el número de milisegundos pasados midnight of January 1, 1970.
En .NET ( fuente en Remarkssecciones)
El tipo de valor DateTime representa fechas y horas con valores que van desde las 00:00:00 (medianoche), el 1 de enero de 0001 Anno Domini (era común) hasta las 11:59:59 p.m., el 31 de diciembre de 9999 d.C. (CE) en el gregoriano. calendario.
621355968000000000es el valor de los ticks de midnight Jan 1 01 CEamidnight Jan 1 1970
Entonces, en .NET
Console.Write(new DateTime(621355968000000000))
// output 1/1/1970 12:00:00 AM
Por lo tanto, convertir el tiempo de JavaScript a .Net ticks
var currentTime = new Date().getTime();
// 10,000 ticks in 1 millisecond
// jsTicks is number of ticks from midnight Jan 1, 1970
var jsTicks = currentTime * 10000;
// add 621355968000000000 to jsTicks
// netTicks is number of ticks from midnight Jan 1, 01 CE
var netTicks = jsTicks + 621355968000000000;
Ahora, en .NET
Console.Write(new DateTime(netTicks))
// output current time
La fecha en JavaScript también contiene desplazamiento. Si necesita deshacerse de él, use lo siguiente:
return ((date.getTime() * 10000) + 621355968000000000) - (date.getTimezoneOffset() * 600000000);
Utilizo la solución de Skeikh y resto ticks para 'offset'.
Eso debería ser date.GetTime(). Tenga en cuenta que C # y Javascript usan diferentes fechas iniciales, así que use algo como esto para convertir a C # DateTime.
public static DateTime GetDateTime(long jsSeconds)
{
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return unixEpoch.AddSeconds(jsSeconds);
}
utcnowticks del servidor (en relación con 1970) en la página y almacenando la diferencia entre ese valor y+new Date()al inicio de la página. Entonces toda la fecha / hora se puede compensar por esa cantidad. Cualquier error se reduce a la latencia de la página.