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.


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 .


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.


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

9

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


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.


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


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


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;

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'

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.