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?



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


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

25
var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();

24

esse código refatorado fará isso

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

isso funciona em todos os navegadores modernos, exceto ie8-


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

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.


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

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


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


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

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.


@ 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());
}

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.