Converter data normal em carimbo de data / hora Unix

105

Como posso converter a data normal 2012.08.10em carimbo de data / hora unix em javascript?

Fiddle: http://jsfiddle.net/J2pWj/




Já vi muitos posts aqui que convertem em PHP, Ruby, etc ... Mas preciso fazer isso dentro de JS.

Stan
fonte
1
possível duplicata da data
Martin York
1
Você tentou newDate.getTime () / 1000?
Gareth Parker
@LokiAstari sim, desculpe. Eu pesquisei, mas não encontrei.
Stan
1
Talvez eu esteja faltando alguma coisa, mas unix timestampé tão fundamental para toda a engenharia e ciência da computação. Gostaria que houvesse um método de conveniência embutido. Atualmente estou usandoMath.floor((+new Date()) / 1000);
Mars Robertson

Respostas:

210
new Date('2012.08.10').getTime() / 1000

Verifique a documentação do JavaScript Date .

Fguillen
fonte
1
Obrigado pela página de documentação Eu fiz o que queria.
Stan
32
Math.floor é ou não é um carimbo de data / hora Unix (terá um decimal)
BT
@fguillen, Mooseman, eu corro e verifico este código. Depois de converter o carimbo de data / hora Unix para a data, ele me dá 2012.08.09 em vez de 2012.08.10. Por que é que..?
WP Learner
@ user2584538, veja minha resposta abaixo. Você deve remover os decimais.
theVinchi de
1
O tempo do @Mentor UNIX é medido em segundos, não milissegundos
Nicu Surdu
60
parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

É importante adicionar o toFixed(0)para remover quaisquer decimais ao dividir por 1000 para converter de milissegundos em segundos.

A .getTime()função retorna o carimbo de data / hora em milissegundos, mas os carimbos de data / hora unix verdadeiros estão sempre em segundos.

theVinchi
fonte
5
apenas tome cuidado para que isso retorne uma string, não um número.
Capaj
3
Bom ponto, resposta alterada para agrupar com parseInt () para converter de volta para inteiro.
theVinchi de
11

Você deve verificar a api moment.js, é muito fácil de usar e tem muitos recursos integrados.

Acho que para o seu problema, você poderia usar algo assim:

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();
Mahus
fonte
9

var d = '2016-01-01T00:00:00.000Z';
console.log(new Date(d).valueOf()); // returns the number of milliseconds since the epoch

KARTHIKEYAN.A
fonte
5

Você pode simplesmente usar o operador + unário

(+new Date('2012.08.10')/1000).toFixed(0);

http://xkr.us/articles/javascript/unary-add/ - procure em Datas.

híbrido9
fonte
2
Quero apenas adicionar dois comentários aqui: o operador unário add + não é necessário, pois /já é um operador matemático. Além disso, toFixedretorna uma string e não um número, caso o tipo seja importante.
Laurens
3

Você pode usar Date.parse () , mas os formatos de entrada que ele aceita dependem da implementação. No entanto, se você pode converter a data para o formato ISO (AAAA-MM-DD) , a maioria das implementações deve entendê-lo.

Consulte Por que Date.parse fornece resultados incorretos? .

Barmar
fonte
3
var date = new Date('2012.08.10');
var unixTimeStamp = Math.floor(date.getTime() / 1000);

Nesse caso, é importante retornar apenas um número inteiro (portanto, uma divisão simples não funcionará) e também retornar apenas os segundos realmente decorridos (é por isso que este código usa Math.floor()e não Math.round()).

dumitru
fonte
2

Você pode fazer isso usando o método Date.parse ().

Date.parse($("#yourCustomDate).val())

Date.parse ("03.03.2016") output-> 1456959600000

Date.parse ("2015-12-12") output-> 1449878400000

Nazar
fonte
1
Como essa resposta se diferencia da dada por Barmar 6 anos atrás?
Capricórnio
1
var datestr = '2012.08.10';
var timestamp = (new Date(datestr.split(".").join("-")).getTime())/1000;
OptimusCrime
fonte
1

Depois de comparar o carimbo de data / hora com o do PHP, nenhuma das opções acima parece correta para meu fuso horário. O código abaixo me deu o mesmo resultado do PHP, que é o mais importante para o projeto que estou fazendo.

function getTimeStamp(input) {
    var parts = input.trim().split(' ');
    var date = parts[0].split('-');
	var time = (parts[1] ? parts[1] : '00:00:00').split(':');

	// NOTE:: Month: 0 = January - 11 = December.
	var d = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
	return d.getTime() / 1000;
}

// USAGE::
var start = getTimeStamp('2017-08-10');
var end = getTimeStamp('2017-08-10 23:59:59');

console.log(start + ' - ' + end);

Estou usando isso no NodeJS, e temos o fuso horário 'Austrália / Sydney'. Então, eu tive que adicionar isso no arquivo .env:

TZ = 'Australia/Sydney'

Acima é equivalente a:

process.env.TZ = 'Australia/Sydney'
Damodar Bashyal
fonte
0

converter timestamp em unix timestamp.

const date = 1513787412; const unixDate = new Date(date * 1000);// Dec 20 2020 (object)

para obter o timestamp após a conversão const TimeStamp = new Date(date*1000).getTime(); //1513787412000

Rajat
fonte