Como faço 07/26/2010
para converter para um carimbo de data / hora UNIX usando Javascript?
Como faço 07/26/2010
para converter para um carimbo de data / hora UNIX usando Javascript?
Respostas:
new Date("2010-7-26")
não analisa no Internet Explorer. O construtor de data depende do método Date.parse () quando uma string é passada, que é dependente da implementação no ECMA-262 3ª edição e, como resultado, notoriamente inflexível no IE.
new Date("2016-3-17").valueOf()
retornará uma longa época
Dê uma olhada em http://www.w3schools.com/jsref/jsref_obj_date.asp
Existe uma função UTC()
que retorna os milissegundos da época unix.
Algumas respostas não explicam os efeitos colaterais das variações no fuso horário do objeto Data do JavaScript. Portanto, você deve considerar esta resposta se for uma preocupação para você.
Método 1: dependente do fuso horário da máquina
Por padrão, o JavaScript retorna uma data considerando o fuso horário da máquina, portanto, o getTime()
resultado varia de computador para computador. Você pode verificar este comportamento executando:
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
Isso não é um problema se você realmente quer o tempo desde a Epoch considerando o seu fuso horário. Portanto, se você deseja obter o tempo desde a época para a data atual ou mesmo uma data especificada com base no fuso horário do computador , você está livre para continuar usando este método.
// 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)
Método 2: Fuso horário da máquina independente
No entanto, se você quiser se divertir com as variações no fuso horário e obter o tempo desde a época para uma data especificada em UTC (ou seja, independente do fuso horário), você precisa usar o Date.UTC
método ou mudar a data de seu fuso horário para 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
Então, usando este método (ou, alternativamente, subtraindo a diferença), o resultado deve ser:
// 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 menos que você saiba o que está fazendo (veja a nota acima), você deve preferir o Método 2 , uma vez que é independente da máquina.
Nota final
Apesar das recomendações nesta resposta, e visto Date.UTC
que não funciona sem uma data / hora especificada, você pode estar inclinado a usar a abordagem alternativa e fazer algo assim:
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" (?)
Isso não faz sentido e provavelmente está ERRADO (você está modificando a data). Esteja ciente de não fazer isso. Se você deseja obter o tempo desde a época a partir da data E HORA atuais , provavelmente está OK usando o Método 1 .
Date.parse()
método analisa uma representação de string de uma data e retorna o número de milissegundos desde então 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
Explore mais em: Date.parse ()
Number(new Date(2010, 6, 26))
Funciona da mesma maneira que as coisas acima. Se você precisar de segundos, não se esqueça de/ 1000