Come si converte 07/26/2010
in un timestamp UNIX utilizzando Javascript?
Come si converte 07/26/2010
in un timestamp UNIX utilizzando Javascript?
Risposte:
new Date("2010-7-26")
non analizzerà in Internet Explorer. Il costruttore di date si basa sul metodo Date.parse () quando viene passata una stringa, che dipende dall'implementazione in ECMA-262 3a edizione e, di conseguenza, notoriamente inflessibile in IE.
new Date("2016-3-17").valueOf()
tornerà un'epoca lunga
Dai un'occhiata a http://www.w3schools.com/jsref/jsref_obj_date.asp
C'è una funzione UTC()
che restituisce i millisecondi dall'epoca unix.
Alcune risposte non spiegano gli effetti collaterali delle variazioni nel fuso orario per l'oggetto Data JavaScript. Quindi dovresti considerare questa risposta se questa è una preoccupazione per te.
Metodo 1: dipendente dal fuso orario della macchina
Per impostazione predefinita, JavaScript restituisce una data considerando il fuso orario della macchina, quindi il getTime()
risultato varia da computer a computer. Puoi verificare questo comportamento eseguendo:
new Date(1970, 0, 1, 0, 0, 0, 0).getTime()
// Since 1970-01-01 is Epoch, you may expect ZERO
// but in fact the result varies based on computer's timezone
Questo non è un problema se vuoi davvero l'ora da Epoch considerando il tuo fuso orario. Quindi, se vuoi ottenere il tempo dall'Epoch per la data corrente o anche una data specificata in base al fuso orario del computer , sei libero di continuare a utilizzare questo metodo.
// Seconds since Epoch (Unix timestamp format)
new Date().getTime() / 1000 // local Date/Time since Epoch in seconds
new Date(2020, 11, 1).getTime() / 1000 // time since Epoch to 2020-12-01 00:00 (local timezone) in seconds
// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)
new Date().getTime() // local Date/Time since Epoch in milliseconds
new Date(2020, 0, 2).getTime() // time since Epoch to 2020-01-02 00:00 (local timezone) in milliseconds
// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)
Metodo 2: indipendente dal fuso orario della macchina
Tuttavia, se si desidera ottenere una corsa delle variazioni nel fuso orario e ottenere l'ora dall'Epoch per una data specificata in UTC (ovvero, indipendentemente dal fuso orario), è necessario utilizzare il Date.UTC
metodo o spostare la data dal fuso orario a UTC:
Date.UTC(1970, 0, 1)
// should be ZERO in any computer, since it is ZERO the difference from Epoch
// Alternatively (if, for some reason, you do not want Date.UTC)
const timezone_diff = new Date(1970, 0, 1).getTime() // difference in milliseconds between your timezone and UTC
(new Date(1970, 0, 1).getTime() - timezone_diff)
// should be ZERO in any computer, since it is ZERO the difference from Epoch
Quindi, utilizzando questo metodo (o, in alternativa, sottraendo la differenza), il risultato dovrebbe essere:
// Seconds since Epoch (Unix timestamp format)
Date.UTC(2020, 0, 1) / 1000 // time since Epoch to 2020-01-01 00:00 UTC in seconds
// Alternatively (if, for some reason, you do not want Date.UTC)
const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date(2020, 0, 1).getTime() - timezone_diff) / 1000 // time since Epoch to 2020-01-01 00:00 UTC in seconds
(new Date(2020, 11, 1).getTime() - timezone_diff) / 1000 // time since Epoch to 2020-12-01 00:00 UTC in seconds
// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)
Date.UTC(2020, 0, 2) // time since Epoch to 2020-01-02 00:00 UTC in milliseconds
// Alternatively (if, for some reason, you do not want Date.UTC)
const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date(2020, 0, 2).getTime() - timezone_diff) // time since Epoch to 2020-01-02 00:00 UTC in milliseconds
// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)
IMO, a meno che tu non sappia cosa stai facendo (vedi nota sopra), dovresti preferire il Metodo 2 , poiché è indipendente dalla macchina.
Nota finale
Sebbene le raccomandazioni in questa risposta, e poiché Date.UTC
non funzionano senza una data / ora specificata, potresti essere incline a utilizzare l'approccio alternativo e fare qualcosa del genere:
const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date().getTime() - timezone_diff) // <-- !!! new Date() without arguments
// means "local Date/Time subtracted by timezone since Epoch" (?)
Questo non ha alcun senso e probabilmente è SBAGLIATO (stai modificando la data). Sii consapevole di non farlo. Se vuoi ottenere il tempo da Epoch dalla data E ORA correnti , molto probabilmente stai bene usando il Metodo 1 .
Date.parse()
analizza una rappresentazione di stringa di una data e restituisce il numero di millisecondi da allora January 1, 1970, 00:00:00 UTC
.
const unixTimeZero = Date.parse('01 Jan 1970 00:00:00 GMT');
const javaScriptRelease = Date.parse('04 Dec 1995 00:12:00 GMT');
console.log(unixTimeZero);
// expected output: 0
console.log(javaScriptRelease);
// expected output: 818035920000
Scopri di più su: Date.parse ()
Number(new Date(2010, 6, 26))
Funziona allo stesso modo delle cose sopra. Se hai bisogno di secondi, non dimenticare di farlo/ 1000