Dans mon système, je stocke une durée dans les tiques, qui est transmise à la demande de mon client mobile et de là, je souhaite convertir des ticks en une forme lisible par l'homme. Dans mon cas, jours, heures et minutes. p>
My Client Mobile Application est codé à l'aide de JavaScript, et c'est donc ce que j'utilise pour convertir la durée en jours / heures / minutes. p>
5 Réponses :
en C # .NET, une seule tique représente cent nanosecondes ou un dix-million d'une seconde. [Source] .
Par conséquent, afin de calculer le nombre de jours à partir du nombre de tiques (arrondi aux numéros entiers les plus proches), j'ai d'abord calculer le nombre de secondes en multipliant par dix millions, puis multipliez cela par le nombre de secondes dans un Jour (60 secondes en minutes, 60 minutes à l'heure, 24 heures sur 24). J'utilise l'opérateur de modulus (%) pour obtenir les valeurs restantes qui représentent la durée des heures et des minutes. P>
var time = 3669905128; // Time value in ticks
var days = Math.floor(time/(24*60*60*10000000)); // Math.floor() rounds a number downwards to the nearest whole integer, which in this case is the value representing the day
var hours = Math.round((time/(60*60*10000000)) % 24); // Math.round() rounds the number up or down
var mins = Math.round((time/(60*10000000)) % 60);
console.log('days: ' + days);
console.log('hours: ' + hours);
console.log('mins: ' + mins);
Veuillez utiliser 10e7 code> au lieu de 10000000 code>, voici quelle notation exponentielle est utile!
@Antonijn: C'est tout à fait comportement acceptable a >.
@ CL4PTR4P D'accord, je n'étais pas au courant de cela, merci d'éclairer moi!
10E7 a 8 zéro d'après 1. 10000000 est en fait 10e6 :)
Vous devez prendre en compte 2 choses: p>
TeaFiles.net a une classe de temps qui utilise des ticks Java = JavaScript. Il a une propriété d'échelle et une échelle predécale.java, qui convertit de .NET à JavaScript. P>
Les ticks de DateTime .NET sont 0,1 microseconde, tandis que JavaScript compte des millisecondes. P>
De plus, .NET compte à partir de 1.1.0000 tandis que JavaScript compte à partir de 1.1.1970. P>
var ticks = 635556672000000000; //ticks are in nanotime; convert to microtime var ticksToMicrotime = ticks / 10000; //ticks are recorded from 1/1/1; get microtime difference from 1/1/1/ to 1/1/1970 var epochMicrotimeDiff = Math.abs(new Date(0, 0, 1).setFullYear(1)); //new date is ticks, converted to microtime, minus difference from epoch microtime var tickDate = new Date(ticksToMicrotime - epochMicrotimeDiff); According to this page the setFullYear method returns "A Number, representing the number of milliseconds between the date object and midnight January 1 1970".Check out this page for all the methods from the javascript Date object.
J'ai utilisé cette approche pour calculer une date (636874594860000000 tiques), mais je ne sais pas pourquoi en JavaScript, je reçois "mercredi 06 2019 10:12:15 GMT + 0100" quand c'est réellement "{06/03 / 2019 08:58:06} "(Ceci est la valeur renvoyée par une nouvelle dateTime (636874594860000000) dans .NET). Je suis inquiet du retard dans les minutes (bien sûr, la différence entre les heures est normale).
C'est assez étrange. Lorsque j'utilise cette fonction avec les tiques que vous avez spécifiées, je reçois le mercredi 06 2019 09:38:34 GMT + 0100 (heure standard de la mi-Europe) qui est identique à la date d'heure C #. Êtes-vous sûr de recevoir les bonnes tiques? Jsfiddle.net/pkmelee337/gwl5up4j/1
Oui, très, très bizarre ... J'ai exécuté le jsfiddle que tu viens de poster et j'ai toujours la mauvaise date "Wed mars 06 2019 10:12:12:50 GMT + 0100 (Hora Estándar de Europa Central)". Même la valeur que vous obtenez n'est pas la seule ... J'aimerais approfondir cette question, mais je suis vraiment perdu ... où je pouvais commencer à vérifier ce problème?
Hmm cela pourrait avoir à faire quelque chose avec les fuseaux horaires. (Mais toujours la différence en minutes est bizarre) pouvez-vous vérifier celui-ci? jsfiddle.net/pkmelee337/gwl5up4j/3 J'ai ajouté la date.utc () pour vous assurer que La date est créée sur UTC. Je ne sais vraiment pas où commencer autrement.
Ça a marché! Je devais juste passer de 0 à l'année, Fixerural (0), car il affichait la date en 2020 année. Mais au moins, les minutes sont correctes maintenant. Quoi qu'il en soit, une question très étrange liée aux fuseaux horaires ...
au côté avec ces extensions, vous pouvez obtenir les ticks JavaScript, puis Vous les transmettez simplement au côté client. p> Si vous utilisez MVC: P> Vous avez la vueModel: P> var hours = mydatetime.getHours();
var minutes = mydatetime.getMinutes();
var seconds = mydatetime.getSeconds();
Faisons plus simple, coquille nous? ....
Selon Microsoft: Public Const Long TicksPerday = 864000000000; P>
https://docs.microsoft.com/en-us/dotnet/api/system.timepan.ticksperday?view=net-5.0 p>
private int GetDaysDiff(DateTime fromDate, DateTime toDate)
{
long ticksPerDay = 864000000000;
long ticksDiff = Math.Abs(fromDate.Ticks - toDate.Ticks);
var days = ticksDiff / ticksPerDay;
return (int)days;
}