converter data iso em milissegundos em javascript

87

Posso converter a data iso em milissegundos? por exemplo, eu quero converter este iso

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

a milissegundos.

Porque eu quero comparar a data atual com a data de criação. E a data de criação é uma data iso.

Robin Carlo Catacutan
fonte
1
O que você quer dizer exatamente com "milissegundos"? Milissegundos em relação a que ponto no tempo? Você quer dizer um carimbo de data / hora UNIX?
Pekka
assim como no yahoo api, a data é mostrada em milissegundos 1328796537, mas no fb api, a data é mostrada em iso2012-02-10T13:18:45+0000
Robin Carlo Catacutan
possível duplicata da Ajuda para analisar a data ISO 8601 em Javascript
mplungjan
@mplungjan relacionado, mas não exato. Eu quero saber a diferença entre os dois tempos.
Robin Carlo Catacutan
Portanto, use o link para traduzi-los primeiro para datas e faça date1.getTime() - date2.getTime()- é tudo que você precisa
mplungjan

Respostas:

145

Tente isto

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);

EDITAR

Você forneceu uma data ISO. Também é aceito pelo construtor do Dateobjeto

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

Editar

O melhor que descobri é livrar-me do deslocamento 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);

Parece funcionar. No que diz respeito aos problemas com a conversão da string ISO em um Dateobjeto, consulte os links fornecidos.

EDITAR

Corrigido o bug com conversão incorreta para milissegundos de acordo com o comentário de Prasad19sara.

Oybek
fonte
Sim, a data não analisa em todos os navegadores. Veja minha resposta na questão relacionada.
Vik David
E veja meu comentário sobre a resposta sob a sua;)
mplungjan
Isso não funciona no Firefoxvar myDate = new Date("2012-02-10T13:19:11+0000");
mplungjan
1
@mplungjan, por que você não usa essa abordagem ? Eu sei que isso é complicado, mas de qualquer maneira))
Oybek
uh ... aquele "T" maiúsculo está fazendo aí? É por isso que não funciona @mplungjan.
wle8300
28

Uma abreviatura das soluções anteriores é

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

Ele faz uma conversão de tipo em tempo real e exibe a data diretamente no formato de milissegundos.

Outra maneira é também usar o método de análise do utilitário Date, que emite apenas o tempo EPOCH em milissegundos.

var myDate = Date.parse("2012-02-10T13:19:11+0000");
Tahsin Turkoz
fonte
Você cometeu um pequeno erro de digitação, '+'
Stuart Siegler
@ stuart-siegler Na verdade não há erro de digitação, o '+' retorna a data em milissegundos.
LordTribual
@LordTribual "+ new" retorna a data em milissegundos?
Stuart Siegler
1
@stuart-siegler Não especificamente "+ novo", mas o "+" resolve o problema e é um atalho, por assim dizer. Por exemplo, +new Date()retorna 1447857230137que é o tempo em milissegundos.
LordTribual
1
É muito mais claro construir explicitamente um objeto JavaScript Number:, const dateMillis = Number(new Date('2017-09-26T20:24:18.801Z'))mas new Date('2017-09-26T20:24:18.801Z').getTime()ou new Date('2017-09-26T20:24:18.801Z').valueOf()é ainda mais legível.
David G
5

Outra opção a partir de 2017 é usar Date.parse(). A documentação do MDN aponta, no entanto, que ele não é confiável antes do ES5.

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

Veja o violino para mais detalhes.

samurai_jane
fonte
O analisador integrado também não é confiável após o ECMAScript 2011. :-)
RobG
2

Outra solução possível é comparar a data atual com January 1, 1970, você pode obter January 1, 1970por new Date(0);

var date = new Date(); 
var myDate= date - new Date(0);
LingYan Meng
fonte
2

Sim, você pode fazer isso em uma única linha

let ms = Date.parse('2019-05-15 07:11:10.673Z');
console.log(ms);//1557904270673
Mohid Kazi
fonte
Qual é o oposto desta função !?
AG1 de
1

Outra solução poderia ser usar o analisador de objeto Number assim:

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);

Isso se converte em milissegundos, assim como getTime()no Dateobjeto

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

Usando isso, podemos obter a data em milissegundos

JibinNajeeb
fonte
0

var data = nova data (string_de_data); var milissegundos = date.getTime ();

Isso funcionou para mim!

Visakh Vijayan
fonte
0

se deseja converter a data UTC em
sintaxe de milissegundos : Date.UTC (ano, mês,? dia,? horas,? min,? seg,? milissegundo);
por exemplo :
date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);
console.log('miliseconds', date_in_mili);

Siddharth
fonte
0

No caso, se alguém quiser obter apenas o tempo de uma data ISO, o seguinte será útil. Eu estava procurando por isso e não consegui encontrar uma pergunta para isso. Portanto, caso alguém veja, será útil.

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

A saída será a única hora de isoDate que é,

15:27
Niroshan Ratnayake
fonte