¿Cómo convertir la fecha a la marca de tiempo?

165

Quiero convertir la fecha a la marca de tiempo, mi entrada es 26-02-2012. solía

new Date(myDate).getTime();

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

selladurai
fuente
posible duplicado de stackoverflow.com/questions/9343971/…
Bogdan Emil Mariesan
puede echar un vistazo a la biblioteca date.js
rsbarro
1
¿Usó Date(myDate).getTime()(lo que ha marcado como código) o la palabra "nuevo" antes de que fuera parte del código? Cuanto más esfuerzo pongas, mejores serán las respuestas que obtendrás.
TJ Crowder
@rsbarro: Excepto que parece que ya no se mantiene (y hay errores pendientes). Sin embargo, MomentJS parece bastante bueno.
TJ Crowder
@TJCrowder He usado date.js y funcionó para lo que lo necesitaba, pero tienes razón, no se ha trabajado activamente en algún tiempo. Comprobaré momentjs. ¡Gracias!
rsbarro

Respuestas:

203
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

Actualizar:

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

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

El alfa
fuente
Desafortunadamente, esto no funciona en Safari5, ya que regresa NaN. En Safari, debe usar el otro posible constructor new Date(year, month, day);, en relación con este ejemplo:new Date(myDate[2], myDate[1], myDate[0]);
insertusernamehere
13
En lugar de convertir la cadena de fecha del formato "europeo" a "americano", es mejor convertirla al formato ISO 8601 ( YYYY-MM-DD), que se garantiza que sea entendido Date()y, en términos generales, es el formato más interoperable para las cadenas de fecha.
Walter Tross
3
Nota: new Date(newDate).getTime()producirá una marca de tiempo en resolución de milisegundos.
h7r
3
Por segundos use: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum
54

Pruebe esta función, 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'));
Ketan Savaliya
fuente
25
var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();
Diodo
fuente
24

este código refactorizado lo hará

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

esto funciona en todos los navegadores modernos excepto ie8-

Jalasem
fuente
10

Hay dos problemas aquí. Primero, solo puede llamar a getTime en una instancia de la fecha. Debe ajustar la nueva Fecha entre paréntesis o asignarla a la variable.

En segundo lugar, debe pasarle una cadena en un formato adecuado.

Ejemplo de trabajo:

(new Date("2012-02-26")).getTime();
Alan Bogu
fuente
1
No es necesario envolver la fecha instantánea en un paréntesis. Solo se requiere un formato de cadena adecuado.
maswerdna
5

Solo necesita invertir su dígito de fecha y cambiar -con ,:

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

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

La configuración regional de PS UK no importa aquí.

antonjs
fuente
Ese formato de fecha también es inválido y no funcionará de manera confiable entre navegadores y entornos locales (no lo hace, por ejemplo, para mí en Chrome con el entorno local del Reino Unido). Si va a sugerir un formato, sugiera uno que esté documentado para que funcione.
TJ Crowder
Obtengo el ejemplo de developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . Olvidé guardar la cuerda. Ahora funciona.
antonjs
2
De acuerdo, al menos ahora el código anterior no está usando un formato de fecha inválido, solo está dando la fecha incorrecta, por dos razones diferentes. Arriba has definido la fecha 2 de marzo de 2014 (tienes el orden de campo desordenado) 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 aborda esos problemas.
TJ Crowder
@TJ Crowder gracias por sus sugerencias. Arreglé el código como dijiste convirtiendo la cadena en un número. Merci
antonjs
2
El primer ejemplo de código sigue siendo incorrecto , y el uso Numberde cadenas que comienzan con a 0es problemático en algunos motores: use parseInty especifique una raíz.
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())));
}
deepakssn
fuente
4

Para convertir la fecha (ISO) a la marca de tiempo de Unix , terminé con una marca de tiempo de 3 caracteres más de lo necesario, por lo que mi año fue de alrededor de 50k ...

Tuve que dividirlo por 1000: new Date('2012-02-26').getTime() / 1000

orszaczky
fuente
3

Para aquellos que desean tener una marca de tiempo legible en 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"

Ejemplo de uso: una extensión de archivo de respaldo. /my/path/my.file.js.20190220

allenhwkim
fuente
3

En caso de que hayas venido aquí buscando la marca de tiempo actual

  var date      = new Date();
  var timestamp = date.getTime();

TLDR:

new Date().getTime();
//console.log(new Date().getTime());
TimeTrax
fuente
2

Su cadena no está en un formato que el Dateobjeto está especificado para manejar . Tendrá que analizarlo usted mismo, usar una biblioteca de análisis de fechas como MomentJS o la anterior (y no se mantiene actualmente, por lo que puedo decir) DateJS , o masajearla en el formato correcto (por ejemplo, 2012-02-29) antes de preguntarDate analizarla .

Por qué está obteniendo NaN: cuando solicita new Date(...)manejar una cadena no válida, devuelve un Dateobjeto que se establece en una fecha no válida ( new Date("29-02-2012").toString()devoluciones "Invalid date"). Llamando getTime()a un objeto de fecha en este estado regresa NaN.

TJ Crowder
fuente
@benvds: Genial, gracias. Aunque encuentro el comentario "Además, no es destructivo para el DOM" un poco extraño ... Espero que lo que quisieron decir es que no cambia el Dateobjeto (que no tiene nada que ver con el 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());
}
Evgeniy
fuente
0

Otros desarrolladores han proporcionado respuestas, pero a mi manera, puede hacerlo sobre la marcha sin crear ninguna función definida por el usuario de la siguiente manera:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
Frederick Eze
fuente