Comment dois-je convertir un objet de date JavaScript en ticks? Je souhaite utiliser les ticks pour obtenir la date exacte de mon application C # après la synchronisation des données.
Si vous souhaitez convertir votre objet DateTime
en ticks universels, utilisez l'extrait de code suivant:
var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);
Il y a 10000 ticks en une milliseconde. Et 621.355.968.000.000.000 ticks entre 1st Jan 0001 et 1st Janvier 1970.
Le type JavaScript Date
== est de l’époque Unix: minuit le 1er janvier 1970.
Le type .NET DateTime
est originaire du 1er janvier 0001 à minuit.
Vous pouvez traduire un objet JavaScript Date
en ticks .NET comme suit:
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);
Si vous entendez par "ticks" quelque chose comme "millisecondes depuis l'époque", vous pouvez appeler ".getTime ()".
var ticks = someDate.getTime();
À partir de documentation MDN , la valeur renvoyée est un
Valeur entière représentant le nombre de millisecondes depuis le 1er janvier 1970 00:00:00 UTC (Epoque Unix).
Développer la réponse acceptée en expliquant pourquoi 635646076777520000
Est ajouté.
Javascript new Date().getTime() or Date.now()
retournera le nombre de millisecondes passées de midnight of January 1, 1970
.
Dans .NET ( source sous Remarks
sections)
Le type de valeur DateTime représente les dates et les heures avec des valeurs allant de 00:00:00 (minuit), au 1er janvier 0001 Anno Domini (Common Era) à 23:59:59, au 31 décembre 9999 après JC dans le Grégorien calendrier.
621355968000000000
Est la valeur des ticks de midnight Jan 1 01 CE
À midnight Jan 1 1970
Donc, en .NET
Console.Write(new DateTime(621355968000000000))
// output 1/1/1970 12:00:00 AM
Par conséquent, convertir le temps javascript en ticks .Net
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;
Maintenant, en .NET
Console.Write(new DateTime(netTicks))
// output current time
La date en JavaScript contient également l'offset. Si vous avez besoin de vous en débarrasser, utilisez ce qui suit:
return ((date.getTime() * 10000) + 621355968000000000) - (date.getTimezoneOffset() * 600000000);
J'utilise la solution de Skeikh et soustrais les ticks pour 'offset'.
Cela devrait être date.GetTime()
. Sachez que C # et Javascript utilisent des dates initiales différentes, utilisez quelque chose comme ceci pour convertir en DateTime C #.
public static DateTime GetDateTime(long jsSeconds)
{
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return unixEpoch.AddSeconds(jsSeconds);
}