Einem Moment eine Dauer hinzufügen (moment.js)

Lesezeit: 4 Minuten

Benutzer-Avatar
Paul H

Momentanversion: 2.0.0

Nach dem Lesen der Dokumenteich dachte, das wäre einfach (Chrome-Konsole):

var timestring1 = "2013-05-09T00:00:00Z";
var timestring2 = "2013-05-09T02:00:00Z";
var startdate = moment(timestring1);
var expected_enddate = moment(timestring2);
var returned_endate = startdate.add(moment.duration(2, 'hours'));
returned_endate == expected_enddate  // false
returned_endate  // Moment {_i: "2013-05-09T00:00:00Z", _f: "YYYY-MM-DDTHH:mm:ss Z", _l: undefined, _isUTC: false, _a: Array[7]…}

Dies ist ein triviales Beispiel, aber ich kann es nicht einmal zum Laufen bringen. Ich habe das Gefühl, dass ich hier etwas Großes verpasse, aber ich verstehe es wirklich nicht. Auch das scheint nicht zu funktionieren:

startdate.add(2, 'hours')
    // Moment {_i: "2013-05-09T00:00:00Z", _f: "YYYY-MM-DDTHH:mm:ss Z", _l: undefined, _isUTC: false, _a: Array[7]…}

Jede Hilfe wäre sehr willkommen.

Bearbeiten:
Mein Endziel ist es, ein binäres Statusdiagramm wie das zu erstellen, an dem ich hier arbeite:
http://bl.ocks.org/phobson/5872894

Wie Sie sehen können, verwende ich derzeit Dummy-X-Werte, während ich dieses Problem durcharbeite.

Ich denke, Sie haben einen wichtigen Punkt in der Dokumentation für verpasst .add()

Mutiert den ursprünglichen Moment durch Hinzufügen von Zeit.

Sie scheinen es als eine Funktion zu behandeln, die das unveränderliche Ergebnis zurückgibt. Leichter Fehler. 🙂

Wenn Sie den Rückgabewert verwenden, handelt es sich um dasselbe Objekt, mit dem Sie begonnen haben. Es wird nur als Bequemlichkeit für die Methodenverkettung zurückgegeben.

Sie können dieses Verhalten umgehen, indem Sie den Moment klonen, wie hier beschrieben.

Sie können auch nicht einfach verwenden == zu testen. Sie könnten jeden Moment auf die gleiche Ausgabe formatieren und diese vergleichen, oder Sie könnten einfach die verwenden .isSame() Methode.

Dein Code lautet jetzt:

var timestring1 = "2013-05-09T00:00:00Z";
var timestring2 = "2013-05-09T02:00:00Z";
var startdate = moment(timestring1);
var expected_enddate = moment(timestring2);
var returned_endate = moment(startdate).add(2, 'hours');  // see the cloning?
returned_endate.isSame(expected_enddate)  // true

  • Ich weiß die Antwort wirklich zu schätzen, Matt. Es klärt vieles auf. Hier ist, was ich immer noch nicht verstehe: jede Darstellung von returned_endate dass ich weiß, wie man darauf zugreift, ist immer noch um Mitternacht und nicht um 2 Uhr morgens. Ich brauche 2 Uhr morgens, damit ich ein D3-Diagramm erstellen kann, an dem ich arbeite (siehe bearbeitete Frage). Danke noch einmal.

    – PaulH

    27. Juni 2013 um 4:28 Uhr

  • Stellen Sie sicher, dass Sie eine der Anzeigemethoden aufrufen, z .format() oder .toDate() oder .unix(). Nur auf den rohen Moment zu schauen, wird nicht gut funktionieren. Vielleicht möchten Sie auch so etwas tun yourmoment.utc().format() um es als utc anstelle der Ortszeit zu formatieren.

    – Matt Johnson-Pint

    27. Juni 2013 um 4:31 Uhr

  • Ja, zu vergessen, dass diese Momente nicht unveränderlich sind, bringt dich hin und wieder. Nett!

    – wohlbornio

    13. Juli 2015 um 20:01 Uhr

  • Notiz an mich selbst – .add(2, 'mins') stillschweigend scheitert … du willst .add(2, 'minutes').

    – Nick Greally

    18. August 2021 um 17:14 Uhr

Benutzer-Avatar
Mahima Agrawal

Ich arbeite an einer Anwendung, in der wir die Route live verfolgen. Der Fahrgast möchte die aktuelle Position des Fahrers und die voraussichtliche Ankunftszeit an seinem Standort anzeigen. Also muss ich der aktuellen Zeit eine gewisse Dauer hinzufügen.

Also habe ich den unten genannten Weg gefunden, dasselbe zu tun. Wir können jede Dauer (Stunde, Minuten und Sekunden) in unserer aktuellen Zeit für Moment hinzufügen:

var travelTime = moment().add(642, 'seconds').format('hh:mm A');// it will add 642 seconds in the current time and will give time in 03:35 PM format

var travelTime = moment().add(11, 'minutes').format('hh:mm A');// it will add 11 mins in the current time and will give time in 03:35 PM format; can use m or minutes 

var travelTime = moment().add(2, 'hours').format('hh:mm A');// it will add 2 hours in the current time and will give time in 03:35 PM format

Es erfüllt meine Anforderung. Vielleicht kann es dir helfen.

  • Es sollte „Minuten“ und nicht „Minuten“ sein.

    – Tanvi Agarwal

    10. Oktober 2017 um 11:57 Uhr

  • Es sollte „Minuten“ und nicht „Minuten“ sein. Oder zumindest kann es ‘m’ sein. Bitte aktualisieren Sie Ihre Antwort!

    – Ulrich Dohou

    29. Januar 2018 um 1:25 Uhr


  • In meiner Antwort steht bereits „Minuten“ und ich habe bereits erwähnt, dass wir „m“ anstelle von „Minuten“ verwenden können (siehe Kommentare zur Antwort). Ich denke, ich muss meine Antwort nicht aktualisieren.

    – Mahima Agrawal

    5. Juli 2018 um 6:50 Uhr

Für Menschen mit a startTime (wie 12h:30:30) und a duration (Wert in Minuten wie 120), das können Sie erraten endTime so:

const startTime="12:30:00";
const durationInMinutes="120";

const endTime = moment(startTime, 'HH:mm:ss').add(durationInMinutes, 'minutes').format('HH:mm');

// endTime is equal to "14:30"

1298490cookie-checkEinem Moment eine Dauer hinzufügen (moment.js)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy