2012-03-26 43 views
87

Quiero convertir la fecha a la marca de tiempo, mi entrada es 26-02-2012. Uséconvertir la fecha a la marca de tiempo en javascript?

new Date(myDate).getTime(); 

Dice NaN ... ¿Alguien puede decir cómo convertir esto?

+0

duplicado posible de http://stackoverflow.com/questions/9343971/timestamp-conversion-javascript –

+0

es posible que desee echar un vistazo a la biblioteca date.js: http://www.datejs.com/ – rsbarro

+1

¿Usó 'Date (myDate) .getTime()' (lo que ha marcado como código), o es la palabra "nueva" antes de que signifique ser parte del código? Mientras más esfuerzo pongas, mejores serán las respuestas que obtengas. –

Respuesta

117
var myDate="26-02-2012"; 
myDate=myDate.split("-"); 
var newDate=myDate[1]+","+myDate[0]+","+myDate[2]; 
alert(new Date(newDate).getTime());​ //will alert 1330192800000 

Actualización:

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

DEMO (Probado en Chrome, FF, Opera, Internet Explorer y Safari).

+0

Desafortunadamente, esto no funciona en Safari5, ya que devuelve 'NaN'. En Safari debes usar el otro posible constructor 'new Date (year, month, day);', con respecto a este ejemplo: 'new Date (myDate [2], myDate [1], myDate [0]);' – insertusernamehere

+4

Check la actualización. –

+6

En lugar de convertir la cadena de fecha del formato "europeo" al "estadounidense", es mejor convertirlo al formato ISO 8601 ('YYYY-MM-DD'), que se garantiza que' Fecha() ' es, en términos generales, el formato más interoperable para las cadenas de fecha. –

2

Su cadena no está en un formato que el objeto Date es specified to handle. Tendrá que analizarlo usted mismo, use una biblioteca de análisis de fecha como MomentJS o la anterior (y no actualizada, hasta donde yo sepa) DateJS, o realice un masaje en el formato correcto (por ejemplo, 2012-02-29) antes de preguntar Date a analizarlo

¿Por qué usted está recibiendo NaN: Cuando se pregunta a new Date(...) para manejar una cadena no válida, devuelve un objeto Date que se establece en una fecha no válida (new Date("29-02-2012").toString() vuelve "Invalid date"). Llamar al getTime() en un objeto de fecha en este estado devuelve NaN.

+0

Otro para UTC: http://arshaw.com/xdate/ – benvds

+0

@benvds: Cool, gracias. Aunque encuentro el comentario * "Además, no es destructivo para el DOM" * un poco extraño ... supongo que lo que querían decir es que no cambia el objeto 'Fecha' (que no tiene nada que ver con el DOM). –

3

Sólo se necesita para revertir su fecha de dígitos y cambiar - con ,:

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

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

P. S. La configuración regional del Reino Unido no importa aquí.

+0

Ese formato de fecha tampoco es válido, y no funcionará de manera confiable entre navegadores y ubicaciones cruzadas (no lo hace, por ejemplo, para mí en Chrome con la configuración regional del Reino Unido). Si va a sugerir un formato, sugiera uno que esté documentado para funcionar. –

+0

Obtengo el ejemplo de https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date. Me olvidé de guardar la cadena. Ahora funciona. – antonjs

+2

De acuerdo, al menos ahora el código anterior no usa un formato de fecha no válido; solo da la fecha incorrecta, por dos razones diferentes. Arriba ha definido la fecha 2 de marzo de 2014 (tiene el orden de campo en mal estado). Y si los campos estuvieran en el orden correcto, definiría la fecha ** 26 de marzo de 2012 (los valores del mes comienzan en cero). Pero como el OP tiene una cadena, no una serie de números, no es tan útil, incluso si se abordan esos problemas. –

20
var dtstr = "26-02-2012"; 
new Date(dtstr.split("-").reverse().join("-")).getTime(); 
4
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()))); 
} 
+0

respuesta larga pero excelente de trabajo –

20

Prueba esta función, se utiliza el método Date.parse() y no requiere ninguna lógica personalizada:

function toTimestamp(strDate){ 
    var datum = Date.parse(strDate); 
    return datum/1000; 
} 
alert(toTimestamp('02/13/2009 23:31:30')); 
+0

¡Esta es, de lejos, la mejor respuesta, gracias! – gyo

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

Buen trabajo, @Evgeniy! ¡Gracias por compartir! – Ricalsin

4

este código refactorizado lo hará

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

esto funciona en todos los navegadores modernos excepto ie8 -

+0

Esta es la verdadera respuesta. El resto es una broma. – Moss

Cuestiones relacionadas