Converti la data normale in timestamp unix


105

Come posso convertire la data normale 2012.08.10in timestamp unix in javascript?

Fiddle: http://jsfiddle.net/J2pWj/




Ho visto molti post qui che lo convertono in PHP, Ruby, ecc ... Ma devo farlo all'interno di JS.


1
possibile duplicato della data
Martin York

1
Hai provato newDate.getTime () / 1000?
Gareth Parker

@LokiAstari sì, mi dispiace. Ho cercato ma non l'ho trovato.
Stan

1
Forse mi manca qualcosa ma unix timestampè così fondamentale per tutta l'ingegneria e l'informatica. Vorrei che ci fosse un metodo di convenienza integrato. Attualmente sto usandoMath.floor((+new Date()) / 1000);
Mars Robertson

Risposte:


210
new Date('2012.08.10').getTime() / 1000

Controlla la documentazione della data JavaScript .


1
Grazie per la pagina di documentazione ho fatto quello che volevo.
Stan

32
Math.floor o non è un timestamp unix (avrà un decimale)
BT

@ fguillen, Mooseman, corro e controllo questo codice. Una volta convertito il timestamp unix fino ad oggi, mi dà 2012.08.09 invece di 2012.08.10. Perché..?
WP Learner

@ user2584538, vedi la mia risposta di seguito. È necessario rimuovere i decimali.
theVinchi

1
Il tempo di @Mentor UNIX è misurato in secondi, non in millisecondi
Nicu Surdu,

60
parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

È importante aggiungere toFixed(0)per rimuovere eventuali decimali quando si divide per 1000 per convertire da millisecondi a secondi.

La .getTime()funzione restituisce il timestamp in millisecondi, ma i veri timestamp unix sono sempre in secondi.


5
fai attenzione che questo restituisca una stringa, non un numero.
Capaj

3
Buon punto, risposta modificata per avvolgere con parseInt () per riconvertire in intero.
theVinchi

11

Dovresti controllare l'API moment.js, è molto facile da usare e ha molte funzionalità integrate.

Penso che per il tuo problema, potresti usare qualcosa del genere:

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();

9

var d = '2016-01-01T00:00:00.000Z';
console.log(new Date(d).valueOf()); // returns the number of milliseconds since the epoch


5

Puoi semplicemente usare l'operatore unario +

(+new Date('2012.08.10')/1000).toFixed(0);

http://xkr.us/articles/javascript/unary-add/ - guarda sotto Date.


2
Voglio solo aggiungere due commenti qui: l'operatore add + unario non è necessario, poiché /è già un operatore matematico. Inoltre, toFixedrestituisce una stringa e non un numero, nel caso in cui il tipo sia importante ..
Laurens

3

È possibile utilizzare Date.parse () , ma i formati di input che accetta dipendono dall'implementazione. Tuttavia, se è possibile convertire la data in formato ISO (AAAA-MM-GG) , la maggior parte delle implementazioni dovrebbe comprenderla.

Vedere Perché Date.parse fornisce risultati errati? .


3
var date = new Date('2012.08.10');
var unixTimeStamp = Math.floor(date.getTime() / 1000);

In questo caso è importante restituire solo un numero intero (quindi una semplice divisione non va bene) e anche restituire solo i secondi effettivamente trascorsi (ecco perché questo codice usa Math.floor()e non Math.round()).


2

Puoi farlo usando il metodo Date.parse ().

Date.parse($("#yourCustomDate).val())

Date.parse ("03.03.2016") output-> 1456959600000

Date.parse ("2015-12-12") output-> 1449878400000


1
Come si differenzia questa risposta da quella data da Barmar 6 anni fa?
Capricorno

1
var datestr = '2012.08.10';
var timestamp = (new Date(datestr.split(".").join("-")).getTime())/1000;

1

Dopo aver confrontato il timestamp con quello di PHP, nessuno dei precedenti sembra corretto per il mio fuso orario. Il codice seguente mi ha dato lo stesso risultato di PHP che è più importante per il progetto che sto facendo.

function getTimeStamp(input) {
    var parts = input.trim().split(' ');
    var date = parts[0].split('-');
	var time = (parts[1] ? parts[1] : '00:00:00').split(':');

	// NOTE:: Month: 0 = January - 11 = December.
	var d = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
	return d.getTime() / 1000;
}

// USAGE::
var start = getTimeStamp('2017-08-10');
var end = getTimeStamp('2017-08-10 23:59:59');

console.log(start + ' - ' + end);

Lo sto usando su NodeJS e abbiamo il fuso orario "Australia / Sydney". Quindi, ho dovuto aggiungere questo sul file .env:

TZ = 'Australia/Sydney'

Sopra è equivalente a:

process.env.TZ = 'Australia/Sydney'

0

converti timestamp in unix timestamp.

const date = 1513787412; const unixDate = new Date(date * 1000);// Dec 20 2020 (object)

per ottenere il timestamp dopo la conversione const TimeStamp = new Date(date*1000).getTime(); //1513787412000

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.