J'ai un champ dans une grille contenant une date/heure et j'ai besoin de connaître la différence entre celle-ci et la date/heure actuelle. Quelle serait la meilleure façon de le faire ?
Les dates sont stockées comme "2011-02-07 15:13:06"
.
J'ai un champ dans une grille contenant une date/heure et j'ai besoin de connaître la différence entre celle-ci et la date/heure actuelle. Quelle serait la meilleure façon de le faire ?
Les dates sont stockées comme "2011-02-07 15:13:06"
.
Cela vous donnera la différence entre deux dates, en millisecondes.
var diff = Math.abs(date1 - date2);
Dans votre exemple, ce serait
var diff = Math.abs(new Date() - compareDate);
Vous devez vous assurer que compareDate
est valide Date
objet.
Quelque chose comme ceci fonctionnera probablement pour vous
var diff = Math.abs(new Date() - new Date(dateStr.replace(/-/g,'/')));
c'est-à-dire en tournant "2011-02-07 15:13:06"
en new Date('2011/02/07 15:13:06')
qui est un format que le Date
peut comprendre.
En TypeScript, j'obtiens une erreur tslint lorsque j'essaie de faire ceci : var diff = Math.abs(new Date() - compareDate) ;
@Ethan : Cela fonctionne. Le temps devrait être ajouté. La différence entre 1980/1/1 et 1960/1/1 correspond aux dix années entre l'époque et 1980, plus les 10 années entre 1960 et l'époque. Par contre, la différence entre 1980/1/1 et 1975/1/1 correspond aux dix années entre l'époque et 1980, moins les 5 années entre 1975 et l'époque. Les deux scénarios sont couverts.
Cela ne fonctionnera pas si d2 est antérieur à 1970 ; dans ce cas, son timestamp en millisecondes sera négatif, et le temps entre l'époque unix et d2 sera en fait ajouté à d1.
@Ethan Oui, il sera ajouté, c'est le but. La différence entre 3 et -3 est de 6, 3 - (-3) == 3 + 3 == 6
Si vous souhaitez obtenir la différence d'heure de l'horloge murale, pour le fuseau horaire local et avec la prise de conscience de l'heure d'été.
Date.prototype.diffDays = function (date: Date): number {
var utcThis = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());
var utcOther = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
return (utcThis - utcOther) / 86400000;
};
Test
it('diffDays - Czech DST', function () {
// expect this to parse as local time
// with Czech calendar DST change happened 2012-03-25 02:00
var pre = new Date('2012/03/24 03:04:05');
var post = new Date('2012/03/27 03:04:05');
// regardless DST, you still wish to see 3 days
expect(pre.diffDays(post)).toEqual(-3);
});
La différence entre les minutes et les secondes se fait de la même manière.
À moins que vous ne soustrayiez des dates sur le même client navigateur et que vous ne vous souciiez pas des cas limites comme les changements d'heure d'été, il est probablement préférable d'utiliser la fonction moment.js qui offre de puissantes API localisées. Par exemple, voici ce que j'ai dans mon utils.js :
subtractDates: function(date1, date2) {
return moment.subtract(date1, date2).milliseconds();
},
millisecondsSince: function(dateSince) {
return moment().subtract(dateSince).milliseconds();
},
6 ans plus tard, moment.js est considéré comme bien trop gonflé et trop lourd pour ses utilisations avec les dates. Considérez cet article et utilisez des alternatives - dev.to/aminnairi/you-probably-don-t-need-moment-js-493m
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.
2 votes
Quel est le format de la date et de l'heure ?
0 votes
C'est stocké comme ça "2011-02-07 15:13:06"
12 votes
Il ne s'agit pas d'un doublon. Il propose une solution différente et est beaucoup mieux expliqué. Il a également un meilleur classement dans les moteurs de recherche.