Obtenir la différence de temps entre deux datetimes
Je sais que je ne peux rien faire et encore plus de passer sur les Dates avec momentjs. Mais embarrassante, je vais avoir un moment difficile essayer de faire quelque chose qui semble simple: geting la différence entre les 2 fois.
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 que c'est que "10" il. Je vis au Brésil, nous sommes donc utc-0300 si cela est pertinent.
Le résultat de moment.duration(now.diff(then))
est d'une durée avec les bonnes valeurs internes:
days: 0
hours: 0
milliseconds: 0
minutes: 39
months: 0
seconds: 30
years: 0
Donc, je suppose que ma question est: comment faire pour convertir un momentjs la Durée d'un intervalle de temps? Je vous pouvez utiliser
duration.get("hours") +":"+ duration.get("minutes") +:+ duration.get("seconds")
mais j'ai l'impression qu'il y a quelque chose de plus élégant que je suis totalement en manque.
mise à jour
en 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)…}
et moment(moment.duration(now.diff(then)))
est:
Wed Dec 31 1969 22:39:30 GMT-0200 (E. South America Daylight Time)…}
Je ne suis pas sûr pourquoi, la seconde valeur est dans la Lumière du jour Temps (-0200)... mais je suis sûr que je n'aime pas les dates 🙁
mise à jour 2
bien, la valeur est -0200 probablement parce que 31/12/1969 était un jour où la lumière du jour, le temps a été utilisé... donc c'est que.
- "mais je suis sûr que je n'aime pas les dates" 😛 Avez-vous jamais lu ceci: nodatime.org/unstable/userguide/trivia.html ?
Vous devez vous connecter pour publier un commentaire.
Cette approche ne fonctionne que lorsque la durée totale est de moins de 24 heures:
Si vous avez 24 heures ou plus, le nombre d'heures sera remis à zéro avec l'approche ci-dessus, de sorte qu'il n'est pas l'idéal.
Si vous souhaitez obtenir une réponse valable pour des durées de 24 heures ou plus,, alors vous aurez à faire quelque chose comme ceci à la place:
Notez que j'utilise le temps universel utc comme un raccourci. Vous pouvait tirer
d.minutes()
etd.seconds()
séparément, mais vous devez également avoir à zeropad eux.Cela est nécessaire parce que la possibilité de formater un
duration
objection n'est pas actuellement dans moment.js. Il a été demandé ici. Cependant, il ya un tiers plugin appelé moment de la durée du format c'est précisément pour cette raison:Votre problème est dans le résultat le passage de l'instant.durée (en) en ce moment() avant la mise en forme; il en résulte moment() en l'interprétant comme une heure par rapport à l'époque Unix.
Il ne vous donne pas exactement le format que vous cherchez, mais
moment.duration(now.diff(then)).humanize()
serait de vous donner un format utile comme "40 minutes". Si vous êtes vraiment désireux que la mise en forme spécifique, vous aurez à construire une nouvelle chaîne de soi-même. Un bon moyen serait de
[diff.asHours(), diff.minutes(), diff.seconds()].join(':')
où
var diff = moment.duration(now.diff(then))
. Cela ne vous donne pas le zéro-padding sur des valeurs numériques. Pour cela, vous pouvez envisager quelque chose comme le trait de soulignement.chaîne - même si il semble comme un long chemin à faire, juste pour un peu plus de zéros. 🙂asHours
au lieu dehours
, et tirez en les décimales. Sinon, il aurait le même problème que vous avez pris dans ma réponse. 🙂[Math.floor(diff.asHours()), diff.minutes(), diff.seconds()].join(':')
afin d'obtenir le résultat souhaité. sans une virgule dans la première partieA fonctionné pour moi
Voir plus
http://momentjs.com/docs/#/displaying/difference/
Si vous voulez différence de deux timestamp dans le total des jours,des heures et des minutes, pas dans des mois et des années .
diff contient 2 mois,23 jours,23 heures et 20 minutes. Mais nous avons besoin de résultats que dans les jours,les heures et les minutes, donc la solution est simple:
Résultat Final sera : 84 jours, 23 heures, 20 minutes.
Lorsque vous appelez
diff
, moment.js calcule la différence en millisecondes.Si les millisecondes est passé à
duration
, il est utilisé pour calculer la durée de ce qui est correct.Cependant. lorsque vous passez le même millisecondes à la
moment()
, il calcule la date qui est de quelques millisecondes à partir(d'après) epoch unix/le temps c'est le 1er janvier 1970 (minuit UTC/GMT).C'est pourquoi vous obtenez 1969 comme l'année avec mauvaise heure.
Je pense donc que c'est la façon dont vous devez le faire depuis moment.js n'offre pas de
format
fonction de la durée. Ou vous pouvez écrire un simple wrapper pour le rendre plus facile/plus joli.Si nous voulons seulement hh:mm:ss, nous pouvons utiliser une fonction comme ça:
Cela devrait fonctionner correctement.
Au lieu de
Il est mieux de le faire
L'utiliser,
Dans l'ES8 à l'aide instant, et commencer à être le moment d'objets.
J'ai créer une fonction simple avec tapuscrit
pour générer le javascript https://www.typescriptlang.org/play/index.html
InTime=06:38,Outtime=15:40
DATE DU TEMPS EN FONCTION D'ENTRÉE
SORTIE