286 votes

Obtenir la différence de temps entre deux dates

Je sais que je peux faire n'importe quoi et d'autres choses concernant les dates avec momentjs. Mais malheureusement, j'ai du mal à faire quelque chose qui semble simple : obtenir la différence entre 2 temps.

Exemple :

var now  = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";

//expected result:
"00:39:30"

ce que j'ai essayé :

var now = moment("04/09/2013 15:00:00");
var then = moment("04/09/2013 14:20:30");

console.log(moment(moment.duration(now.diff(then))).format("hh:mm:ss"))
//outputs 10:39:30  

Je ne comprends pas ce qu'est ce "10". Je vis au Brésil, nous sommes donc en utc-0300 si cela est pertinent.

Le résultat de moment.duration(now.diff(then)) est une durée avec les valeurs internes correctes :

 days: 0
 hours: 0
 milliseconds: 0
 minutes: 39
 months: 0
 seconds: 30
 years: 0

Ma question est donc la suivante : comment convertir un momentjs Duration en un intervalle de temps ? Je peux bien sûr utiliser

duration.get("hours") +":"+ duration.get("minutes") +:+ duration.get("seconds")

mais j'ai le sentiment qu'il y a quelque chose de plus élégant qui m'échappe complètement.

mise à jour
En y regardant de plus près, dans l'exemple ci-dessus now est :

Tue Apr 09 2013 15:00:00 GMT-0300 (E. South America Standard Time)…}

y moment(moment.duration(now.diff(then))) est :

Wed Dec 31 1969 22:39:30 GMT-0200 (E. South America Daylight Time)…}

Je ne sais pas pourquoi la deuxième valeur est en heure d'été (-0200)... mais je suis sûr que je n'aime pas les dates :(

mise à jour 2

Eh bien, la valeur est -0200 probablement parce que le 31/12/1969 était une date où l'on utilisait l'heure d'été... c'est donc ça.

0voto

Serkan KONAKCI Points 84

Je crée une fonction simple avec typescript

const diffDuration: moment.Duration = moment.duration(moment('2017-09-04 12:55').diff(moment('2017-09-02 13:26')));
setDiffTimeString(diffDuration);

function setDiffTimeString(diffDuration: moment.Duration) {
  const str = [];
  diffDuration.years() > 0 ? str.push(`${diffDuration.years()} year(s)`) : null;
  diffDuration.months() > 0 ? str.push(`${diffDuration.months()} month(s)`) : null;
  diffDuration.days() > 0 ? str.push(`${diffDuration.days()} day(s)`) : null;
  diffDuration.hours() > 0 ? str.push(`${diffDuration.hours()} hour(s)`) : null;
  diffDuration.minutes() > 0 ? str.push(`${diffDuration.minutes()} minute(s)`) : null;
  console.log(str.join(', '));
} 
// output: 1 day(s), 23 hour(s), 29 minute(s)

pour générer du javascript https://www.typescriptlang.org/play/index.html

0voto

Sanket Parchande Points 546

InTime=06:38,Outtime=15:40

 calTimeDifference(){
        this.start = dailyattendance.InTime.split(":");
        this.end = dailyattendance.OutTime.split(":");
        var time1 = ((parseInt(this.start[0]) * 60) + parseInt(this.start[1]))
        var time2 = ((parseInt(this.end[0]) * 60) + parseInt(this.end[1]));
        var time3 = ((time2 - time1) / 60);
        var timeHr = parseInt(""+time3);
        var  timeMin = ((time2 - time1) % 60);
    }

0voto

aakarsh Points 21

DIFFÉRENCE DE TEMPS D'ÉPOCHAGE EN UTILISANT MOMENTJS :

Pour obtenir la différence entre deux époques :

Syntaxe : moment.duration(moment(moment(date1).diff(moment(date2)))).asHours()

Différence d'heures : moment.duration(moment(moment(1590597744551).diff(moment(1590597909877)))).asHours()

Différence en minutes : moment.duration(moment(moment(1590597744551).diff(moment(1590597909877)))).asMinutes().toFixed()

Remarque : Vous pouvez supprimer .toFixed() si vous avez besoin de valeurs précises.

Code :

const moment = require('moment')

console.log('Date 1',moment(1590597909877).toISOString())
console.log('Date 2',moment(1590597744551).toISOString())
console.log('Date1 - Date 2 time diffrence is : ',moment.duration(moment(moment(1590597909877).diff(moment(1590597744551)))).asMinutes().toFixed()+' minutes')

Voir l'exemple de travail ici : https://repl.it/repls/MoccasinDearDimension

0voto

Chirag Jain Points 55

Pour obtenir la différence entre les dates au format two-moment ou javascript Date format indifference of minutes, la solution la plus optimale est la suivante

const timeDiff = moment.duration((moment(apptDetails.end_date_time).diff(moment(apptDetails.date_time)))).asMinutes()

vous pouvez changer le format de différence selon vos besoins en remplaçant simplement la fonction asMinutes()

0voto

Mnemo Points 23

Si vous souhaitez obtenir un nombre de jours localisé entre deux dates ( startDate , endDate ):

var currentLocaleData = moment.localeData("en");
var duration = moment.duration(endDate.diff(startDate));
var nbDays = Math.floor(duration.asDays()); // complete days
var nbDaysStr = currentLocaleData.relativeTime(returnVal.days, false, "dd", false);

nbDaysStr contiendra quelque chose comme "3 jours" ;

Véase https://momentjs.com/docs/#/i18n/changing-locale/ pour savoir comment afficher le nombre d'heures ou le nombre de mois, par exemple.

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