Obtenha epoch para uma data específica usando Javascript

97

Como faço 07/26/2010para converter para um carimbo de data / hora UNIX usando Javascript?

Asim Zaidi
fonte

Respostas:

182

Você pode criar um Dateobjeto e chamá getTime-lo:

new Date(2010, 6, 26).getTime() / 1000
Michael Mrozek
fonte
12
O argumento do mês para o construtor de data carece de um pouco de consistência e, na verdade, é baseado em zero. Isso significa que 7 é de agosto, então você precisa subtrair 1 :-)
Andy E
6
@Andy - é uma ideia maluca compensar meses por -1, mantendo o resto, e é exatamente o tipo de coisa que pode fazer um ônibus espacial enlouquecer, se o JavaScript fosse usado lá :)
Anurag
6
Provavelmente melhor ir: new Date ("2010-7-26"). GetTime () / 1000 para que você não precise se preocupar com compensações.
Vincent McNabb
5
@Vincent: 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.
Andy E
Também é possível minimizar possíveis erros ou mal-entendidos ao especificar o fuso horário. Pelo menos as versões reais (Linux-) do Firefox, Opera e Chrome para instanciar uma data de JavaScript como nova data ("1 de janeiro de 1970 GMT + 00: 00, 00:01"); o que também reduz a confusão sobre o formato de mês correto.
Michael Besteck
37
new Date("2016-3-17").valueOf() 

retornará uma longa época

Jyo Banerjee
fonte
2

Você também pode usar a função Date.now ().

Neha M
fonte
1

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.UTCmé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.UTCque 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 .

Diego queiroz
fonte
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 ()

Sourabh
fonte
0
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

Andrii Los
fonte