¿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.
c#
javascript
Talha
fuente
fuente
utcnow
ticks 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.Respuestas:
Si desea convertir su
DateTime
objeto en ticks universales, utilice el siguiente fragmento de código:var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);
fuente
El
Date
origen del tipo de JavaScript es la época de Unix: la medianoche del 1 de enero de 1970.El
DateTime
origen del tipo .NET es la medianoche del 1 de enero de 0001.Puede traducir un
Date
objeto 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);
fuente
(621355968e9 + (new Date()).getTime() * 1e4)
condensa estas 4 líneas una vez que tenga la comprensión. Gran participación @LukeHSi 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
fuente
Ampliando la respuesta aceptada como por qué
635646076777520000
se agrega.Javascript
new Date().getTime() or Date.now()
devolverá el número de milisegundos pasadosmidnight of January 1, 1970
.En .NET ( fuente en
Remarks
secciones)621355968000000000
es el valor de los ticks demidnight Jan 1 01 CE
amidnight 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
fuente
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'.
fuente
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); }
fuente