Convertir fecha normal a marca de tiempo unix

105

¿Cómo puedo convertir la fecha normal 2012.08.10a la marca de tiempo de Unix en javascript?

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




He visto muchas publicaciones aquí que lo convierten en PHP, Ruby, etc ... Pero necesito hacer esto dentro de JS.

Stan
fuente
1
posible duplicado de la fecha
Martin York
1
¿Has probado newDate.getTime () / 1000?
Gareth Parker
@LokiAstari sí, lo siento. Busqué pero no encontré eso.
Stan
1
Quizás me esté perdiendo algo, pero unix timestampes fundamental para toda la ingeniería y la informática. Ojalá hubiera un método de conveniencia incorporado. Actualmente estoy usandoMath.floor((+new Date()) / 1000);
Mars Robertson

Respuestas:

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

Consulte la documentación de JavaScript Date .

fguillen
fuente
1
Gracias por la página de documentación hice lo que quería.
Stan
32
Math.floor it o no es una marca de tiempo de Unix (tendrá un decimal)
BT
@ fguillen, Mooseman, ejecuto y verifico este código. Una vez que convierto la marca de tiempo de Unix a la fecha, me está dando 2012.08.09 en lugar de 2012.08.10. Porqué es eso..?
WP Learner
@ user2584538, vea mi respuesta a continuación. Debes quitar los decimales.
theVinchi
1
El tiempo de @Mentor UNIX se mide en segundos, no en milisegundos
Nicu Surdu
60
parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

Es importante agregar toFixed(0)para eliminar los decimales al dividir por 1000 para convertir de milisegundos a segundos.

La .getTime()función devuelve la marca de tiempo en milisegundos, pero las marcas de tiempo verdaderas de Unix siempre están en segundos.

theVinchi
fuente
5
solo tenga en cuenta que esto devuelve una cadena, no un número.
Capaj
3
Buen punto, cambié la respuesta para ajustar con parseInt () para convertir nuevamente a entero.
theVinchi
11

Debería consultar la api de moment.js, es muy fácil de usar y tiene muchas funciones integradas.

Creo que para tu problema, podrías usar algo como esto:

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();
Mahus
fuente
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
fuente
5

Simplemente podría usar el operador unario +

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

http://xkr.us/articles/javascript/unary-add/ : busque en Fechas.

híbrido9
fuente
2
Solo quiero agregar dos comentarios aquí: el operador unario agregar + no es necesario, ya /que ya es un operador matemático. Además, toFixeddevuelve una cadena y no un número, en caso de que el tipo sea importante ..
Laurens
3

Puede usar Date.parse () , pero los formatos de entrada que acepta dependen de la implementación. Sin embargo, si puede convertir la fecha al formato ISO (AAAA-MM-DD) , la mayoría de las implementaciones deberían comprenderlo.

Consulte ¿Por qué Date.parse da resultados incorrectos? .

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

En este caso, es importante devolver solo un número entero (por lo que una división simple no funcionará) y también devolver solo los segundos realmente transcurridos (por eso este código se usa Math.floor()y no Math.round()).

dumitru
fuente
2

Puede hacerlo usando el método Date.parse ().

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

Salida de fecha.parse ("03.03.2016" )-> 1456959600000

Salida de Date.parse ("2015-12-12" )-> 1449878400000

Nazar
fuente
1
¿En qué se diferencia esta respuesta de la que dio Barmar hace 6 años?
Capricornio
1
var datestr = '2012.08.10';
var timestamp = (new Date(datestr.split(".").join("-")).getTime())/1000;
OptimusCrime
fuente
1

Después de comparar la marca de tiempo con la de PHP, nada de lo anterior parece correcto para mi zona horaria. El siguiente código me dio el mismo resultado que PHP, que es el más importante para el proyecto que estoy haciendo.

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

Estoy usando esto en NodeJS, y tenemos la zona horaria 'Australia / Sydney'. Entonces, tuve que agregar esto en el archivo .env:

TZ = 'Australia/Sydney'

Arriba es equivalente a:

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

convertir la marca de tiempo a la marca de tiempo de Unix.

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

para obtener la marca de tiempo después de la conversión const TimeStamp = new Date(date*1000).getTime(); //1513787412000

Rajat
fuente