Fügen Sie einem Datum 10 Sekunden hinzu

253

Wie kann ich einem JavaScript-Datumsobjekt 10 Sekunden hinzufügen?

Etwas wie das:

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;
George
quelle
4
Oder wenn Sie es über den Konstruktor tun möchten - neues Datum (neues Datum (). GetTime () + 10000)
John Strickler

Antworten:

416

Es gibt auch eine setSecondsMethode:

var t = new Date();
t.setSeconds(t.getSeconds() + 10);

Eine Liste der anderen Date Funktionen finden Sie unter MDN


setSeconds behandelt Wrap-Around-Fälle korrekt:

var d;
d = new Date('2014-01-01 10:11:55');
alert(d.getMinutes() + ':' + d.getSeconds()); //11:55
d.setSeconds(d.getSeconds() + 10);
alert(d.getMinutes() + ':0' + d.getSeconds()); //12:05

zzzzBov
quelle
3
Beachten Sie, dass meine Nodejs-Installation d.getSeconds () als Zeichenfolge zurückgibt. Ich musste dies in (+ d.getSeconds ()) ändern. Das unäre Plus konvertiert eine Zeichenfolge in eine Zahl. Vielleicht etwas offensichtlicher wäre 1 * d.getSeconds ()
tqwhite
1
@tqwhite, typeof new Date().getSeconds()kehrt 'number'in node zurück, daher denke ich, dass Sie möglicherweise andere Probleme haben (es sei denn, Sie haben eine veraltete Version von node oder so).
zzzzBov
2
Versuchen Sie es d.setSeconds(d.getSeconds() - 92);und Sie erhalten 2'32 "Unterschied statt 1'32". Die Lösung mit new Date(d.getTime() - 92*1000);funktioniert jedoch!
Rafalon
1
Sich auf undokumentiertes Verhalten zu verlassen (das setSeconds (70) erhöht die Minuten um eins und setzt Sekunden auf 10), scheint eine allgemein schlechte Praxis zu sein. Die (derzeit nächsten) Antworten, die auf Date.getTime () + <Anzahl der hinzuzufügenden Millisekunden> verweisen>, scheinen der beabsichtigte und unterstützte Ansatz zu sein und wären für die meisten Programmierer aus verschiedenen Sprachen ohne enzyklopädische Kenntnis der undokumentierten Nuancen der einzelnen Sprachen klar bestimmte JavaScript-Engine.
Tom Dibble
1
Bei historischen Zeitzonen kann ein Problem auftreten (siehe Kommentare unter @ Rons Antwort: stackoverflow.com/a/17267937/198797) . Möglicherweise kein alltägliches Szenario, aber dennoch ein Problem.
Tsemer
110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);
4esn0k
quelle
33
... und der Grund, warum Sie 10000 hinzugefügt haben, ist, dass Javascript-Daten in Millisekunden funktionieren, dh 10000 = 10 * 1000
psiphi75
1
Und das + vor timeObject wird benötigt, weil es timeObject in eine Zahl umwandelt. Also ist es wie timeObject.getTime () in Rons Antwort
James
1
JavaScript ist so böse. Diese frühen APIs sind etwas durcheinander.
usr
62

Nur für die Performance-Maniacs unter uns.

Zeit kriegen

var d = new Date('2014-01-01 10:11:55');
d = new Date(d.getTime() + 10000);

5.196.949 Ops / Sek., Am schnellsten


setSeconds

var d = new Date('2014-01-01 10:11:55');
d.setSeconds(d.getSeconds() + 10);

2.936.604 Ops / Sek., 43% langsamer


moment.js

var d = new moment('2014-01-01 10:11:55');
d = d.add(10, 'seconds');

22.549 Ops / Sek., 100% langsamer


Vielleicht ist es der am wenigsten lesbare (nicht so schlechte), aber der schnellste Weg :)

jspref Online-Tests

Danpe
quelle
3
Vielen Dank für die Details, sehr nützlich :)
Dean
58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Siehe auch: Wie füge ich einem JavaScript-Datumsobjekt 30 Minuten hinzu?

Ron
quelle
7
Von allen falschen Antworten hier ist dies die richtige.
Cory Mawhorter
Ja, das ist die richtige Antwort. Leider bezieht sich Google auf diese Frage, wenn bei der Suche nach "Javascript-Datum Sekunden hinzufügen" gesucht wird und die am häufigsten gewählte Antwort falsch ist.
Philipp Gächter
2
Kann jemand bitte erklären, was die ausgewählte Antwort (derzeit von @zzzzBov) falsch macht? Für mich geht das.
Tsemer
1
@tsemer, auf den ersten Blick dachte ich, dass die Antwort von zzzzBov nicht richtig ist, weil ich nicht dachte, dass der Minutenwert aktualisiert wird, wenn er außerhalb des Bereichs liegt. Aber wegen Ihrer "Herausforderung" habe ich das MDN überprüft und bestätigt, dass die Antwort definitiv richtig ist. :)
Ron
1
@tsemer Versuchen Sie es in einem Webbrowser mit Unterstützung für historische Zeitzonen (z. B. Internet Explorer 11): Stellen Sie auch Ihre Systemzeitzone auf "Asien / Jekaterinburg" ein:var timestamp = Date.parse("2011-03-26T20:59:59.999Z"); var d = new Date(timestamp); d.setSeconds(d.getSeconds() + 10); console.log(d.getTime() - timestamp);
4esn0k
9

Versuche dies

a = new Date();
a.setSeconds(a.getSeconds() + 10);
lostyzd
quelle
4
timeObject.setSeconds(timeObject.getSeconds() + 10)
Tomasz Nurkiewicz
quelle
4

Ich habe ein paar neue Varianten

  1. var t = new Date(Date.now() + 10000);
  2. var t = new Date(+new Date() + 10000);
1nstinct
quelle
2

Das Date()Objekt in Javascript ist wirklich nicht so schlau.

Wenn Sie sich nur auf das Hinzufügen von Sekunden konzentrieren, scheint dies reibungslos zu funktionieren. Wenn Sie jedoch versuchen, X Sekunden hinzuzufügen, fügen Sie X DateObjekte und Stunden usw. zu demselben Objekt hinzu , bei dem Sie Probleme haben. Also habe ich einfach darauf zurückgegriffen, nur die setSeconds()Methode zu verwenden und meine Daten in Sekunden umzuwandeln (was gut funktioniert hat).

Wenn jemand das Hinzufügen von Zeit zu einem globalen Date()Objekt mit allen festgelegten Methoden demonstrieren kann und die endgültige Zeit korrekt angezeigt wird, würde ich es gerne sehen, aber ich habe das Gefühl, dass jeweils eine festgelegte Methode für ein bestimmtes Date()Objekt und verwendet werden soll das Mischen führt zu einem Durcheinander.

var vTime = new Date();

var iSecondsToAdd = ( iSeconds + (iMinutes * 60) + (iHours * 3600) + (iDays * 86400) );

vTime.setSeconds(iSecondsToAdd);

Hier ist eine weitere Dokumentation, die helfen kann :

coding_is_fun
quelle
2
  1. Sie können die setSecondsMethode verwenden, indem Sie Sekunden von heute abrufen und nur 10 Sekunden hinzufügen

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. Sie können dem neuen Datum 10 * 1000 Millisekunden hinzufügen:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. Sie können verwenden setTime:

    today.setTime(now.getTime() + 10000)
Javed IN
quelle
1

Versuchen Sie es auf diese Weise.

Date.prototype.addSeconds = function(seconds) {
  var copiedDate = new Date(this.getTime());
  return new Date(copiedDate.getTime() + seconds * 1000);
}

Einfach anrufen und zuweisen new Date().addSeconds(10)

Ikram - Ud - Daula
quelle