Dodaj 10 sekund do daty

253

Jak mogę dodać 10 sekund do obiektu daty JavaScript?

Coś takiego:

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;
Jerzy
źródło
4
Lub jeśli chcesz to zrobić za pomocą konstruktora - nowa data (nowa data (). GetTime () + 10000)
John Strickler

Odpowiedzi:

416

Istnieje również setSecondsmetoda:

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

Aby uzyskać listę innych Date funkcji, powinieneś sprawdzić MDN


setSeconds będzie poprawnie obsługiwać przypadki zawijania:

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
źródło
3
Uwaga, moja instalacja Nodejs zwraca ciąg d.getSeconds (). Musiałem zmienić to na (+ d.getSeconds ()) Unary plus konwertuje ciąg na liczbę. Być może nieco bardziej oczywistym byłoby 1 * d.getSeconds ()
tqwhite
1
@tqwhite, typeof new Date().getSeconds()zwraca 'number'w węźle, więc myślę, że możesz mieć inne problemy (chyba że używasz przestarzałej wersji węzła lub czegoś takiego).
zzzzBov
2
Spróbuj zrobić, d.setSeconds(d.getSeconds() - 92);a skończysz z różnicą 2'32 "zamiast 1'32". Rozwiązanie z new Date(d.getTime() - 92*1000);działa jednak!
Rafalon
1
Poleganie na nieudokumentowanym zachowaniu (to, że setSeconds (70) zwiększy liczbę minut o jedną i ustawi liczbę sekund na 10) wydaje się być ogólnie złym postępowaniem. (Obecnie następne) odpowiedzi wskazujące na Date.getTime () + <liczba milisekund do dodania> wydają się być zamierzonym i obsługiwanym podejściem i byłyby jasne dla większości programistów pochodzących z różnych języków bez encyklopedycznej wiedzy o nieudokumentowanych niuansach każdego konkretny silnik JavaScript.
Tom Dibble,
1
Problem może wystąpić w historycznych strefach czasowych, zobacz komentarze pod odpowiedzią @ Rona: stackoverflow.com/a/17267937/198797 . Być może nie jest to powszechny scenariusz, ale jednak problem.
tsemer
110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);
4esn0k
źródło
33
... a powodem dodania 10000 jest to, że daty Javascript działają w milisekundach, tj. 10000 = 10 * 1000
psiphi75,
1
A + przed timeObject jest potrzebne, ponieważ rzutuje timeObject na liczbę. To jest jak timeObject.getTime () w odpowiedzi Rona
James
1
JavaScript jest bardzo nieprzyjemny. Te wczesne interfejsy API są nieco popieprzone.
usr
62

Tylko dla maniaków wydajności wśród nas.

uzyskać czas

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

5 196 949 Operacji / s, najszybciej


setSeconds

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

2 936 604 operacji / s, o 43% wolniej


moment.js

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

22,549 operacji / s, 100% wolniej


Może więc jest to najmniej czytelna dla człowieka (nie taka zła), ale najszybsza droga :)

jspref testy online

Danpe
źródło
3
Dzięki za szczegóły, bardzo przydatne :)
Dziekan
58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Zobacz także: Jak dodać 30 minut do obiektu daty JavaScript?

Ron
źródło
7
wszystkich błędnych odpowiedzi tutaj jest poprawna.
Cory Mawhorter
Tak, to poprawna odpowiedź. Niestety Google odnosi się do tego pytania, jeśli wyszukiwanie „javascript date add seconds” i najczęściej głosowana odpowiedź jest nieprawidłowa.
Philipp Gächter
2
Czy ktoś może wyjaśnić, co robi wybrana odpowiedź (obecnie z @zzzzBov)? Mi to pasuje.
tsemer
1
@ tsemer, na pierwszy rzut oka, myślałem, że odpowiedź zzzzBov jest nieprawidłowa, ponieważ nie sądziłem, że zaktualizuje wartość minut, jeśli jest poza zakresem. Ale z powodu twojego „wyzwania” przejrzałem MDN i potwierdziłem, że odpowiedź jest zdecydowanie poprawna. :)
Ron
1
@ tsemer Wypróbuj w przeglądarce internetowej ze wsparciem dla historycznych stref czasowych (na przykład Internet Explorer 11): Ustaw także 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);
strefę czasową
9

Spróbuj tego

a = new Date();
a.setSeconds(a.getSeconds() + 10);
lostyzd
źródło
4
timeObject.setSeconds(timeObject.getSeconds() + 10)
Tomasz Nurkiewicz
źródło
4

Mam kilka nowych wariantów

  1. var t = new Date(Date.now() + 10000);
  2. var t = new Date(+new Date() + 10000);
1 wyraźny
źródło
2

Date()Obiektu w JavaScript nie jest to naprawdę mądry.

Jeśli skupisz się na dodawaniu sekund, wydaje się, że poradzisz sobie płynnie, ale jeśli spróbujesz dodać liczbę X sekund, dodaj liczbę X minut i godzin itp. Do tego samego Dateobiektu , co spowoduje kłopoty. Więc po prostu wróciłem do korzystania tylko z tej setSeconds()metody i konwertowania danych na sekundy (co działało dobrze).

Jeśli ktokolwiek może zademonstrować dodanie czasu do Date()obiektu globalnego przy użyciu wszystkich ustawionych metod, a czas końcowy wyszedł poprawnie, chciałbym go zobaczyć, ale mam wrażenie, że jedna metoda zestawu powinna być używana jednocześnie na danym Date()obiekcie i mieszanie ich prowadzi do bałaganu.

var vTime = new Date();

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

vTime.setSeconds(iSecondsToAdd);

Oto kilka innych dokumentów, które mogą pomóc :

coding_is_fun
źródło
2
  1. możesz użyć tej setSecondsmetody, zdobywając sekundy od dzisiaj i dodając w niej 10 sekund

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. Możesz dodać 10 * 1000 milisekund do nowej daty:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. Możesz użyć setTime:

    today.setTime(now.getTime() + 10000)
Javed IN
źródło
1

Wypróbuj w ten sposób

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

Wystarczy zadzwonić i przypisać new Date().addSeconds(10)

Ikram - Ud - Daula
źródło