J'utilise React Js et je souhaite effectuer une soustraction de temps dans JavaScript avec la bibliothèque moment .

J'ai essayé mon code comme suit:

timecheck(){
    var time1 = moment().format("09:00:00");
    var time2 = moment().format("00:03:15");
    var timeStr = time2.split(':');
    var h = timeStr[0];
    var m = timeStr[1];
    var s = timeStr[2];

    var time3 = moment(time1).subtract({'hours': h, 'minutes': m, 'second': s}).format('hh:mm:ss');
    console.log(time3);
  }

Le code ci-dessus était ma fonction timecheck, je voudrais exécuter time3 = time1 - time2, le journal de la console en tant que InvalidDate

Puis-je savoir où se trouve mon erreur de syntaxe?

1
Lawraoke 23 août 2020 à 08:28

4 réponses

Meilleure réponse

Vous pouvez simplement utiliser la fonction .subtract pour obtenir les résultats que vous recherchez. Vous n'avez pas besoin d'utiliser split ou quoi que ce soit du genre!

De plus, nous devons définir le format de nos temps que nous soustrayons comme hh:mm:ss dans l'objet moment sinon vous obtiendrez un avertissement deprecation.

let time1 = moment("09:00:00", "hh:mm:ss");
let time2 = moment("00:03:15", "hh:mm:ss");
let subtract = time1.subtract(time2);
let format = moment(subtract).format("hh:mm:ss")
console.log(format); //08:56:45
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.js"></script>
4
Always Helping 23 août 2020 à 06:00

Moment a une fonction de différence:

var time1 = moment("09:00:00", "hh:mm:ss");
var time2 = moment("00:03:15", "hh:mm:ss");
var diff = time2.diff(time1);

diff sera le nombre de millisecondes entre les deux dates. Alors ça devrait être juste un cas de:

var time3 = moment(diff).format('hh:mm:ss');

Voir https://momentjs.com/docs/#/displaying/difference/ pour plus de détails.

1
adey_888 23 août 2020 à 05:51

Je remarque que vos variables h, m et s sont des chaînes plutôt que des nombres. Vous semblez vouloir des nombres plutôt que des chaînes. Essayez quelque chose comme

var h = timeStr[0] - 0;

Ou quelle que soit votre façon préférée de forcer une chaîne à une valeur numérique.

1
Robert Lozyniak 23 août 2020 à 05:40
    const time1 = moment("09:00:00", 'hh:mm:ss'); //create the first time
    const time2 = moment("00:03:15", 'hh:mm:ss'); //create the second time

    const hours = time1.diff(time2, 'hours'); //Get the hours diff and set the hours for second date
    time2.add(hours, 'hours');

    const minutes = time1.diff(time2, 'minutes');
    time2.add(minutes, 'minutes');

    const seconds = time1.diff(time2, 'seconds');
    time2.add(seconds, 'seconds');

    // Get the differences
    const diff = [
        hours,
        minutes,
        seconds
    ];

    // Get the diff as a string
    const time3 = moment(diff, 'hh:mm:ss').format('hh:mm:ss');
    console.log(time3);
2
Kalhan.Toress 23 août 2020 à 05:48