Como converter data em timestamp?

165

Eu quero converter data em timestamp, minha entrada é 26-02-2012. eu usei

new Date(myDate).getTime();

Diz NaN. Alguém pode dizer como converter isso?

selladurai
fonte
possível duplicação de stackoverflow.com/questions/9343971/…
Bogdan Emil Mariesan
você pode dar uma olhada na biblioteca date.js
rsbarro 26/12/12
1
Você usou Date(myDate).getTime()(o que marcou como código) ou a palavra "novo" antes dela deveria fazer parte do código? Quanto mais esforço você colocar, melhores serão as respostas.
TJ Crowder
@rsbarro: Exceto que não parece mais ser mantido (e há bugs pendentes). MomentJS parece muito bom, no entanto.
TJ Crowder
@TJCrowder Eu usei o date.js e funcionou para o que eu precisava, mas você está certo, não tem sido trabalhado ativamente há algum tempo. Vou verificar momentjs. Obrigado!
rsbarro

Respostas:

203
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

Atualizar:

var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+"/"+myDate[0]+"/"+myDate[2];
console.log(new Date(newDate).getTime());

DEMO (Testado no Chrome, FF, Opera, IE e Safari).

The Alpha
fonte
Infelizmente, isso não funciona no Safari5, pois retorna NaN. No Safari, você deve usar o outro construtor possível new Date(year, month, day);, com relação a este exemplo:new Date(myDate[2], myDate[1], myDate[0]);
insertusernamehere
13
Em vez de converter a sequência de datas do formato "Europeu" para "Americano", é melhor convertê-la para o formato ISO 8601 ( YYYY-MM-DD), que é garantido para ser entendido Date()e é, geralmente, o formato mais interoperável para as seqüências de datas.
Walter Tross
3
Nota: new Date(newDate).getTime()produzirá um registro de data e hora em resolução de milissegundos.
H7r
3
Para segundos, use: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum
54

Experimente esta função, ela usa o método Date.parse () e não requer nenhuma lógica personalizada:

function toTimestamp(strDate){
   var datum = Date.parse(strDate);
   return datum/1000;
}
alert(toTimestamp('02/13/2009 23:31:30'));
Ketan Savaliya
fonte
25
var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();
Diodo
fonte
24

esse código refatorado fará isso

let toTimestamp = strDate => Date.parse(strDate)

isso funciona em todos os navegadores modernos, exceto ie8-

Jalasem
fonte
10

Existem dois problemas aqui. Primeiro, você pode chamar getTime apenas em uma instância da data. Você precisa agrupar a nova data entre colchetes ou atribuí-la à variável.

Segundo, você precisa passar uma string em um formato adequado.

Exemplo de trabalho:

(new Date("2012-02-26")).getTime();
Alan Bogu
fonte
1
Não é necessário agrupar a data instantânea em um colchete. Somente um formato de sequência adequado é necessário.
Maswerdna 27/11/19
5

Você só precisa reverter o dígito da data e alterar -com ,:

 new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)

No seu caso:

 var myDate="26-02-2012";
 myDate=myDate.split("-");
 new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();

A localidade do PS UK não importa aqui.

antonjs
fonte
Esse formato de data também é inválido e não funciona de maneira confiável entre navegadores e localidades (por exemplo, não é para mim no Chrome com a localidade do Reino Unido). Se você vai sugerir um formato, sugira um que esteja realmente documentado para funcionar.
TJ Crowder
Eu recebo o exemplo de developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . Só esqueci de guardar a corda. Agora funciona.
antonjs
2
Ok, pelo menos agora o código acima não está usando um formato de data inválido - está apenas fornecendo a data errada, por dois motivos distintos. Acima, você definiu a data 2 de março de 2014 (a ordem do campo foi alterada). E se os campos estivessem na ordem correta, você definiria a data 26 de março de 2012 (os valores do mês começam em zero). Mas como o OP tem uma sequência, não uma série de números, não é tão útil, mesmo que você tenha resolvido esses problemas.
TJ Crowder
@TJ Crowder obrigado por suas sugestões. Corrigi o código como você disse, convertendo a String em um número. Merci.
antonjs
2
O primeiro exemplo de código ainda está errado , e o uso Numberde strings começando com a 0é problemático em alguns mecanismos - use parseInte especifique uma raiz.
TJ Crowder
5
function getTimeStamp() {
       var now = new Date();
       return ((now.getMonth() + 1) + '/' + (now.getDate()) + '/' + now.getFullYear() + " " + now.getHours() + ':'
                     + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + ':' + ((now.getSeconds() < 10) ? ("0" + now
                     .getSeconds()) : (now.getSeconds())));
}
deepakssn
fonte
4

Para converter a data (ISO) em carimbo de data / hora do Unix , acabei com um carimbo de data / hora 3 caracteres mais do que o necessário, então meu ano foi algo em torno de 50k ...

Eu tive que dividir por 1000: new Date('2012-02-26').getTime() / 1000

orszaczky
fonte
3

Para quem deseja ter um registro de data e hora legível no formato de, yyyymmddHHMMSS

> (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"

Exemplo de uso: uma extensão de arquivo de backup. /my/path/my.file.js.20190220

allenhwkim
fonte
3

Caso você tenha vindo aqui procurando o carimbo de data / hora atual

  var date      = new Date();
  var timestamp = date.getTime();

TLDR:

new Date().getTime();
//console.log(new Date().getTime());
TimeTrax
fonte
2

Sua sequência não está em um formato que o Dateobjeto seja especificado para manipular . Você terá que analisá-lo você mesmo, usar uma biblioteca de análise de datas como MomentJS ou mais antiga (e atualmente não mantida, até onde eu sei) DateJS , ou massageá-la no formato correto (por exemplo, 2012-02-29) antes de pedir Datepara analisá-la .

Por que você está recebendo NaN: Quando você pede new Date(...)para manipular uma sequência inválida, ela retorna um Dateobjeto definido como uma data inválida ( new Date("29-02-2012").toString()retorna "Invalid date"). A chamada getTime()de um objeto de data nesse estado retorna NaN.

TJ Crowder
fonte
@ Benvds: Legal, obrigado. Embora eu ache o comentário "Além disso, não é destrutivo para o DOM" um pouco estranho ... Espero que eles quisessem dizer que ele não altera o Dateobjeto (o que não tem nada a ver com o DOM).
TJ Crowder
2
/**
 * Date to timestamp
 * @param  string template
 * @param  string date
 * @return string
 * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
 */
function datetotime(template, date){
    date = date.split( template[1] );
    template = template.split( template[1] );
    date = date[ template.indexOf('m') ]
        + "/" + date[ template.indexOf('d') ]
        + "/" + date[ template.indexOf('Y') ];

    return (new Date(date).getTime());
}
Evgeniy
fonte
0

As respostas foram fornecidas por outros desenvolvedores, mas da minha maneira, você pode fazer isso rapidamente, sem criar nenhuma função definida pelo usuário, como a seguir:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
Frederick Eze
fonte