85 votes

Comment convertir un objet date JavaScript en ticks

Comment convertir un objet date JavaScript en ticks ? Je veux utiliser les ticks pour obtenir la date exacte pour mon application C# après synchronisation des données.

1 votes

Gardez à l'esprit que la date et l'heure du navigateur peuvent être réglées sur n'importe quel fuseau horaire, de sorte que vos données ne seront pas relatives à l'UTC sur le serveur. Je compense normalement en injectant la date et l'heure du serveur dans le fichier utcnow en ticks (par rapport à 1970) dans la page et stocker la différence entre cette valeur et +new Date() en début de page. Ensuite, toutes les dates et heures peuvent être décalées de ce montant. Toute erreur est alors simplement due à la latence de la page.

131voto

Sheikh Ali Points 426

Si vous voulez convertir votre DateTime en ticks universels, puis utilisez l'extrait de code suivant :

var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);

Il y a 10000 tics dans une milliseconde. Et 621.355.968.000.000.000 ticks entre 1 st Jan 0001 et 1 st Janvier 1970.

5 votes

Cela permet d'obtenir les tics lorsque vous êtes en C#. Voir la réponse de Pointy ci-dessous pour une méthode en javascript.

2 votes

Le numéro ajouté ne fonctionne pas avec moi, il me donne toujours l'heure:21:00 le jour précédent, mais celui-ci (621356076000000000) fonctionne bien.

0 votes

Dans Google Chrome 56.0.2924.87 (64-bit) la valeur correcte est (621356076000000000), alors quelle est la différence entre ces deux valeurs ?

59voto

LukeH Points 110965

Le JavaScript Date L'origine de type est l'époque d'Unix : minuit le 1er janvier 1970.

Le programme .NET DateTime L'origine du type est à minuit le 1er janvier 0001.

Vous pouvez traduire un JavaScript Date à .NET ticks 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);

7 votes

(621355968e9 + (new Date()).getTime() * 1e4) condense ces 4 lignes une fois que vous avez compris. Excellent partage @LukeH

39voto

Pointy Points 172438

Si par "ticks" vous voulez dire quelque chose comme "millisecondes depuis l'époque", vous pouvez appeler ".getTime()".

var ticks = someDate.getTime();

De la Documentation MDN la valeur retournée est un

Valeur entière représentant le nombre de millisecondes depuis le 1er janvier 1970 00:00:00 UTC (époque Unix).

13 votes

Ticks != millisecondes, donc en C#, un seul tick représente cent nanosecondes.

13voto

Sami Points 3083

En développant la réponse acceptée, à savoir pourquoi 635646076777520000 est ajouté.

Javascript new Date().getTime() or Date.now() renverra le nombre de millisecondes passé de midnight of January 1, 1970 .

En .NET( fuente sous Remarks sections)

Le type de valeur DateTime représente des dates et des heures dont les valeurs vont de 00:00:00 (minuit), le 1er janvier 0001 Anno Domini (ère commune) à 11:59:59 P.M., le 31 décembre 9999 A.D. (C.E.) dans le calendrier grégorien.

621355968000000000 est la valeur des ticks de midnight Jan 1 01 CE a midnight Jan 1 1970

Ainsi, dans .NET

  Console.Write(new DateTime(621355968000000000))
  // output 1/1/1970 12:00:00 AM

D'où la conversion du 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, dans .NET

 Console.Write(new DateTime(netTicks))
 // output current time

10voto

jabko87 Points 1404

La date en JavaScript contient également un décalage. Si vous voulez vous en débarrasser, utilisez ce qui suit :

return ((date.getTime() * 10000) + 621355968000000000) - (date.getTimezoneOffset() * 600000000);

J'utilise la solution de Skeikh et soustrait les ticks pour le 'décalage'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X