web-dev-qa-db-fra.com

Comment convertir un objet de date JavaScript en ticks

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.

71
Talha

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.

107
Sheikh Ali

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);
49
LukeH

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).

30
Pointy

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
8
Sami

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'.

5
jabko87

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);
}
2
Pieter