Ottieni la differenza di tempo tra due date in secondi


149

Sto cercando di fare la differenza tra due date in pochi secondi. La logica sarebbe così:

  • fissare una data iniziale che sarebbe ora;
  • imposta una data finale che sarebbe la data iniziale più un certo numero di secondi in futuro (diciamo 15 per esempio)
  • ottenere la differenza tra quei due (la quantità di secondi)

Il motivo per cui lo sto facendo con le date è perché la data / ora finale dipende da alcune altre variabili e non è mai la stessa (dipende dalla velocità con cui un utente fa qualcosa) e memorizzo anche la data iniziale per altre cose.

Ho provato qualcosa del genere:

var _initial = new Date(),
    _initial = _initial.setDate(_initial.getDate()),
    _final = new Date(_initial);
    _final = _final.setDate(_final.getDate() + 15 / 1000 * 60);

var dif = Math.round((_final - _initial) / (1000 * 60));

Il fatto è che non ho mai la differenza giusta. Ho provato a dividere per 24 * 60ciò che mi avrebbe lasciato con i secondi, ma non ho mai capito bene. Quindi cosa c'è di sbagliato nella mia logica? Potrei fare uno stupido errore dato che è abbastanza tardi, ma mi dà fastidio che non riesco a farlo funzionare :)


2
L'ordine delle operazioni è la chiave.
Dylan Cross,

1
Quindi ti piacerebbe avere un timestamp, aggiungere 15 secondi e quindi vedere qual è la differenza in secondi. Direi che le probabilità sono alte che la differenza sarà ... aspettare ... 15 secondi?
adeneo,


1
Capisco davvero cosa stai cercando di fare (penso), ma se prendi una nuova Data (), che è il tempo unix in questo momento, aggiungi 15 secondi e controlla subito la differenza, la differenza sarà di 15 secondi (meno i millisecondi necessari per calcolare), ma suppongo che la tua intenzione sia quella di confrontare in qualche modo questo futuro.
adeneo,

1
Non capisco davvero, per dimostrare il mio punto, ecco un FIDDLE funzionante per il tuo esempio sopra. Se stai cercando di capire quanto tempo l'utente ha impiegato per fare qualcosa, di solito ottieni il timestamp quando l'utente avvia l'operazione e il timestamp quando l'utente ha terminato l'operazione, confrontandoli e sai quanto tempo ci è voluto . Che diamine sono i 15 secondi?
adeneo,

Risposte:


283

Il codice

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;

O ancora più semplice, (endDate - startDate) / 1000come sottolineato nei commenti, a meno che tu non stia usando il dattiloscritto.


La spiegazione

Devi chiamare il getTime()metodo per gli Dateoggetti, quindi semplicemente sottrarli e dividerli per 1000 (poiché è originariamente in millisecondi). In aggiunta, quando chiami il getDate()metodo, stai effettivamente ottenendo il giorno del mese come un numero intero compreso tra 1 e 31 (non basato su zero) rispetto al tempo di epoca che potresti ottenere chiamando il getTime()metodo, che rappresenta il numero di millisecondi dal 1 ° gennaio 1970 alle 00:00


declamazione

A seconda di cosa la data legata operazioni sono, si potrebbe voler investire nell'integrazione tale libreria come date.js o moment.js che rendono le cose molto più facile per gli sviluppatori, ma questo è solo una questione di preferenze personali.

Ad esempio in moment.js faremmo il moment1.diff(moment2, "seconds")che è bello.


Documenti utili per questa risposta


15
Non è necessario getTIme , le Date possono essere sottratte l'una dall'altra poiché l' operatore - le costringerà a Numbers.
RobG,

3
getTime è necessario se si utilizza dattiloscritto che non consente operazioni aritmetiche tra elementi diversi da qualsiasi, numero o enum
zaffaste

Puoi usare .valueOf(), che è quello che l' -operatore chiamerebbe in ogni caso ...
Heretic Monkey il

1
che ne dite se abbiamo bisogno anche delle differenze di orario / minuto ...? Devo dividerlo per 60 o multipli di esso ...? @Juan
gumuruh,

Si prega di aggiungere nuovi dubbi come domande individuali, ma dal momento che questo sarebbe probabilmente chiuso come duplicato, dai un'occhiata qui stackoverflow.com/questions/1322732/…
Juan Cortés

5

È possibile utilizzare new Date().getTime()per ottenere i timestamp. Quindi è possibile calcolare la differenza tra la fine e iniziare e infine trasformare il timestamp che è msin s.

const start = new Date().getTime();
const end = new Date().getTime();

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);

4
<script type="text/javascript">
var _initial = '2015-05-21T10:17:28.593Z';
var fromTime = new Date(_initial);
var toTime = new Date();

var differenceTravel = toTime.getTime() - fromTime.getTime();
var seconds = Math.floor((differenceTravel) / (1000));
document.write('+ seconds +');
</script>

1

Sotto il codice fornirà la differenza di tempo in secondi.

var date1 = new Date(); // current date
var date2 = new Date("06/26/2018"); // mm/dd/yyyy format
var timeDiff = Math.abs(date2.getTime() - date1.getTime()); // in miliseconds
var timeDiffInSecond = Math.ceil(timeDiff / 1000); // in second

alert(timeDiffInSecond );

0

prova a utilizzare funzioni dedicate da linguaggi di programmazione di alto livello. JavaScript si .getSeconds();adatta qui:

var specifiedTime = new Date("November 02, 2017 06:00:00");
var specifiedTimeSeconds = specifiedTime.getSeconds(); 

var currentTime = new Date();
var currentTimeSeconds = currentTime.getSeconds(); 

alert(specifiedTimeSeconds-currentTimeSeconds);

0

differenza di tempo tra ora e 10 minuti dopo usando momentjs

let start_time = moment().format('YYYY-MM-DD HH:mm:ss');
let next_time = moment().add(10, 'm').format('YYYY-MM-DD HH:mm:ss');

let diff_milliseconds = Date.parse(next_time) - Date.parse(star_time);
let diff_seconds = diff_milliseconds * 1000;
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.