converti la data iso in millisecondi in javascript


89

Posso convertire la data ISO in millisecondi? per esempio voglio convertire questo iso

2012-02-10T13:19:11+0000

a millisecondi.

Perché voglio confrontare la data corrente dalla data di creazione. E la data di creazione è una data iso.


1
Cosa intendi esattamente per "millisecondi"? Millisecondi rispetto a quale momento? Intendi un timestamp UNIX?
Pekka

proprio come in yahoo api, la data è mostrata in millisecondi 1328796537, ma in fb api, la data è mostrata in iso2012-02-10T13:18:45+0000
Robin Carlo Catacutan


@mplungjan correlato, ma non esatto. Voglio capire la differenza tra i due tempi.
Robin Carlo Catacutan

Quindi usa il link per tradurli prima in date e fai date1.getTime() - date2.getTime()- è tutto ciò di cui hai bisogno
mplungjan

Risposte:


151

Prova questo

var date = new Date("11/21/1987 16:00:00"); // some mock date
var milliseconds = date.getTime(); 
// This will return you the number of milliseconds
// elapsed from January 1, 1970 
// if your date is less than that date, the value will be negative

console.log(milliseconds);

MODIFICARE

Hai fornito una data ISO. È accettato anche dal costruttore Datedell'oggetto

var myDate = new Date("2012-02-10T13:19:11+0000");
var result = myDate.getTime();
console.log(result);

modificare

La cosa migliore che ho trovato è sbarazzarmi dell'offset manualmente.

var myDate = new Date("2012-02-10T13:19:11+0000");
var offset = myDate.getTimezoneOffset() * 60 * 1000;

var withOffset = myDate.getTime();
var withoutOffset = withOffset - offset;
console.log(withOffset);
console.log(withoutOffset);

Sembra funzionare. Per quanto riguarda i problemi con la conversione della stringa ISO Datenell'oggetto puoi fare riferimento ai link forniti.

MODIFICARE

Risolto bug con conversione errata in millisecondi secondo il commento di Prasad19sara.


Sì, la data non verrà analizzata su tutti i browser. Vedi la mia risposta sulla domanda correlata.
Vik David

E vedi il mio commento sulla risposta sotto il tuo;)
mplungjan

Questo non funziona in Firefoxvar myDate = new Date("2012-02-10T13:19:11+0000");
mplungjan

1
@mplungjan perché non usi questo approccio ? So che è complicato ma comunque))
Oybek

uh ... è quella "T" maiuscola che ci fa lì? Ecco perché non funziona @mplungjan.
wle8300

28

Una scorciatoia delle soluzioni precedenti è

var myDate = +new Date("2012-02-10T13:19:11+0000");

Esegue una conversione di tipo al volo e fornisce direttamente la data in formato millisecondo.

Un altro modo è utilizzare anche il metodo di analisi di Date util che restituisce solo l'ora EPOCH in millisecondi.

var myDate = Date.parse("2012-02-10T13:19:11+0000");

Hai un piccolo errore di battitura lì, "+"
Stuart Siegler

@ stuart-siegler In realtà non è un errore di battitura, il "+" restituisce la data in millisecondi.
LordTribual

@LordTribual "+ new" restituisce la data in millisecondi?
Stuart Siegler

1
@ stuart-siegler Non specificamente "+ new" ma il "+" fa il trucco ed è una scorciatoia per così dire. Ad esempio, +new Date()restituisce 1447857230137il tempo in millisecondi.
LordTribual

1
È molto più chiaro costruire esplicitamente un oggetto Numero JavaScript:, const dateMillis = Number(new Date('2017-09-26T20:24:18.801Z'))ma new Date('2017-09-26T20:24:18.801Z').getTime()o new Date('2017-09-26T20:24:18.801Z').valueOf()è ancora più leggibile.
David G,

5

Un'altra opzione a partire dal 2017 è usare Date.parse(). La documentazione di MDN sottolinea, tuttavia, che non è affidabile prima di ES5.

var date = new Date(); // today's date and time in ISO format
var myDate = Date.parse(date);

Vedi il violino per maggiori dettagli.


Anche il parser integrato è inaffidabile dopo ECMAScript 2011. :-)
RobG

2

Un'altra possibile soluzione è quella di confrontare data corrente con January 1, 1970, è possibile ottenere January 1, 1970da new Date(0);

var date = new Date(); 
var myDate= date - new Date(0);

2

Sì, puoi farlo in una sola riga

let ms = Date.parse('2019-05-15 07:11:10.673Z');
console.log(ms);//1557904270673

Qual è il contrario di questa funzione !?
AG1

1

Un'altra soluzione potrebbe essere quella di utilizzare il parser di oggetti Number in questo modo:

let result = Number(new Date("2012-02-10T13:19:11+0000"));
let resultWithGetTime = (new Date("2012-02-10T13:19:11+0000")).getTime();
console.log(result);
console.log(resultWithGetTime);

Questo converte in millisecondi proprio come getTime()su Dateobject


0
var date = new Date()
console.log(" Date in MS last three digit = "+  date.getMilliseconds())
console.log(" MS = "+ Date.now())

Usando questo possiamo ottenere la data in millisecondi


0

var date = new Date (date_string); var milliseconds = date.getTime ();

Questo ha funzionato per me!


0

se vuole convertire la data UTC in millisecondi
sintassi: Date.UTC (anno, mese,? giorno,? ore,? min,? sec,? milisec);
per esempio :
date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);
console.log('miliseconds', date_in_mili);


0

Nel caso in cui qualcuno volesse prendere solo l'ora da una data ISO, sarà utile seguire. Lo stavo cercando e non sono riuscito a trovare una domanda. Quindi, nel caso qualcuno veda, sarà utile.

let isoDate = '2020-09-28T15:27:15+05:30';
let result = isoDate.match(/\d\d:\d\d/);
console.log(result[0]);

L'output sarà l'unica volta da isoDate che è,

15:27
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.