Aggiungi 10 secondi a una data


Risposte:


416

C'è anche un setSecondsmetodo:

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

Per un elenco delle altre Date funzioni, è necessario controllare MDN


setSeconds gestirà correttamente i casi avvolgenti:

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


3
Attenzione, la mia installazione di Nodejs restituisce d.getSeconds () come stringa. Ho dovuto cambiare questo in (+ d.getSeconds ()) Il plus unario converte una stringa in un numero. Forse un po 'più ovvio sarebbe 1 * d.getSeconds ()
tqwhite

1
@tqwhite, typeof new Date().getSeconds()ritorna 'number'nel nodo, quindi penso che potresti avere altri problemi (a meno che tu non sia su una versione obsoleta del nodo o qualcosa del genere).
zzzzBov,

2
Prova a fare d.setSeconds(d.getSeconds() - 92);e finirai con una differenza di 2'32 "invece di 1'32". La soluzione con new Date(d.getTime() - 92*1000);funziona comunque!
Rafalon,

1
Affidarsi a comportamenti non documentati (che setSeconds (70) aumenterà i minuti di uno e imposterà i secondi su 10) sembra una pratica generalmente sbagliata. Le risposte (attualmente successive) che puntano a Date.getTime () + <numero di millisecondi da aggiungere> sembrano essere l'approccio previsto e supportato e sarebbero chiare per la maggior parte dei programmatori provenienti da lingue diverse senza conoscenza enciclopedica delle sfumature non documentate di ciascuna particolare motore JavaScript.
Tom Dibble,

1
Potrebbe verificarsi un problema con i fusi orari storici, vedere i commenti sotto la risposta di @ Ron: stackoverflow.com/a/17267937/198797 . Probabilmente non uno scenario comune ma comunque un problema.
Tsemer,

110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);

33
... e il motivo per cui hai aggiunto 10000 è perché le date Javascript funzionano in millisecondi, cioè 10000 = 10 * 1000
psiphi75

1
E il + before timeObject è necessario perché lancia timeObject su un numero. Quindi è come timeObject.getTime () nella risposta di Ron
James,

1
JavaScript è così brutto. Queste prime API sono un po 'sbagliate.
usr

62

Solo per i maniaci dello spettacolo tra noi.

prendi tempo

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

5.196.949 Ops / sec, più veloce


setSeconds

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

2.936.604 Ops / sec, 43% più lento


moment.js

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

22.549 Ops / sec, 100% più lento


Quindi forse è il meno leggibile dall'uomo (non così male) ma il modo più veloce di andare :)

test online di jspref


3
Grazie per i dettagli, molto utile :)
Decano

58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Consultare anche: Come aggiungere 30 minuti a un oggetto Date JavaScript?


7
di tutte le risposte sbagliate qui, questa è quella corretta.
Cory Mawhorter,

Sì, questa è la risposta corretta. Sfortunatamente Google si sta riferendo a questa domanda se la ricerca di "data javascript aggiunge secondi" e la risposta più votata è errata.
Philipp Gächter,

2
Qualcuno può spiegare cosa sta facendo la risposta selezionata (attualmente da @zzzzBov)? Per me funziona.
Tsemer,

1
@tsemer, a prima vista, ho pensato che la risposta di zzzzBov non fosse corretta, perché non pensavo che aggiornasse il valore dei minuti se non rientra nell'intervallo. Ma a causa della tua "sfida", ho esaminato la MDN e ho confermato che la risposta è decisamente giusta. :)
Ron,

1
@tsemer Prova in un browser Web con supporto per i fusi orari storici (ad esempio Internet Explorer 11): imposta anche il 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);
fuso orario del

9

Prova questo

a = new Date();
a.setSeconds(a.getSeconds() + 10);


4

Ho un paio di nuove varianti

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

2

L' Date()oggetto in JavaScript non è poi così intelligente.

Se ti concentri solo sull'aggiunta di secondi, sembra che gestisca le cose senza intoppi, ma se provi ad aggiungere X numero di secondi, aggiungi X numero di minuti e ore, ecc., Allo stesso Dateoggetto che finisci nei guai. Quindi sono semplicemente tornato a utilizzare solo il setSeconds()metodo e convertire i miei dati in pochi secondi (che ha funzionato bene).

Se qualcuno può dimostrare di aggiungere tempo a un Date()oggetto globale usando tutti i metodi set e far uscire correttamente l'ora finale, vorrei vederlo, ma ho la sensazione che un metodo set debba essere utilizzato alla volta su un determinato Date()oggetto e mescolarli porta a un disastro.

var vTime = new Date();

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

vTime.setSeconds(iSecondsToAdd);

Ecco qualche altra documentazione che può aiutare :


2
  1. puoi usare il setSecondsmetodo ottenendo secondi da oggi e semplicemente aggiungendo 10 secondi in esso

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. Puoi aggiungere 10 * 1000 millisecondi alla nuova data:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. Puoi usare setTime:

    today.setTime(now.getTime() + 10000)

1

Prova in questo modo.

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

Basta chiamare e assegnare new Date().addSeconds(10)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.