2009-11-19 93 views
15

¿Cuál sería la mejor manera de convertir una fecha de formato de fecha mysql en un objeto Date de JavaScript?Convierta una fecha mySQL a la fecha de Javascript

mySQL formato de fecha es 'AAAA-MM-DD' (Formato ISO).

+1

¿Está teniendo un problema específico? ¿Qué has intentado hasta ahora? ¿Estás teniendo problemas para pasar la fecha al objeto Fecha de JavaScript? – Zak

+0

Date.parse ('2009-01-01'); No funciona. tratando de encontrar una forma de convertirlo. las fechas vienen a través de un objeto json de otra compañía que devuelve la fecha en formato ISO. –

Respuesta

37

Dada su aclaración de que no se puede cambiar el formato de la fecha de entrada, se necesita algo como esto:

var dateParts = isoFormatDateString.split("-"); 
var jsDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2].substr(0,2)); 

respuesta original:

¿existe una razón por la que no se puede conseguir una marca de tiempo en lugar de la cadena de fecha? Esto se haría por algo como:

SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table; 

continuación, obtener la epoch_time en JavaScript, y es una simple cuestión de:

var myDate = new Date(epoch_time * 1000); 

El multiplicando por 1,000 se debe a JavaScript toma milisegundos, y UNIX_TIMESTAMP da segundo .

+0

no tengo acceso para cambiar la forma en que me devuelven los datos. Tengo una fecha con formato ISO, necesito transformarla en el lado del cliente. –

2

UNIX timestamp (milisegundos desde el 1 de enero de 1970) sería mi elección preferida.

Puede pasarlo como un entero y utilizar el método JS setTime() para crear un objeto JS Date a partir de él.

0

Se puede dividir la fecha '-' como separador y utilizar este constructor:

var d = new Date(Y, M - 1, D); 
+0

y cómo lo dividiría así? –

+0

if ds = 'AAAA-MM-DD': ds.split ('-') –

0

Tropecé con esto buscando hacer exactamente lo que el OP quería, y usé la respuesta de jhurshman, así que hice +1, pero está incompleta, ya que usará 00:00:00 GMT-0500 (CDT) para la parte de tiempo ya que no se pasa al objeto de fecha (var jsDate).

En caso de que nadie más está mirando para crear la plena Javascriptdate object

ejemplo:

Sat Mar 29 2014 23:24:28 GMT-0500 (CDT) 

Basado en un formato de MySQL DATETIME

ejemplo:

'9999-12-31 23:59:59'. 

Usted tendrá que utilizar el siguiente:

var dateParts = isoFormatDateString.split("-"); 
var jsDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2].substr(0, 2), dateParts[2].substr(3, 2), dateParts[2].substr(6, 2), dateParts[2].substr(9, 2)); 

Se volverá en los navegadores zona horaria actual como va a crear el objeto de fecha, pero me gustaría hacer la conversión zona horaria en el backend en la mayoría de los casos.

0

Basándose en la respuesta de Jhurisman.Si usted quiere ajustar la hora del día también utilizar el siguiente:

var dateParts = mysqlDate; 
var timeParts = dateParts[2].substr(3).split(":"); 

var jsDate = new Date(
       dateParts[0], 
       dateParts[1] - 1, 
       dateParts[2].substr(0,2), 
       timeParts[0], 
       timeParts[1], 
       timeParts[2] 
      ); 
20

el método rápido más cortos y:

var mySQLDate = '2015-04-29 10:29:08'; 
new Date(Date.parse(mySQLDate.replace('-','/','g'))); 
+0

¡finalmente un trazador de líneas! ¡gracias! – arod

+0

¡Buen truco! ¡Muchas gracias! – nobody

+0

No funcionó para mí. Cambié la instrucción replace a: replace (/ [-]/g, '/') –

2

En AngularJS modo, gracias a @Jonas Calle Sciangula

.filter('toJSDate', function(){ 
     return function (dateString) { 
      return new Date(Date.parse(dateString.replace('-','/','g'))) 
     }; 
    }) 
1

mySqlDate tiene el formato "aaaa-mm-dd".

var javaDate = new Date(mySqlDate); 

Esta línea de código funciona bien para mí.

+0

También trabajo con el formato "aaaa-mm-dd hh: ii: ss" – ling

0

Mientras JS no posee suficientes herramientas básicas para hacer esto, es bastante simple de usar

/** 
 
* Ashu, You first need to create a formatting function to pad numbers to two digits… 
 
**/ 
 
function twoDigits(d) { 
 
    if(0 <= d && d < 10) return "0" + d.toString(); 
 
    if(-10 < d && d < 0) return "-0" + (-1*d).toString(); 
 
    return d.toString(); 
 
} 
 

 

 
Date.prototype.toMysqlFormat = function() { 
 
    return this.getUTCFullYear() + "-" + twoDigits(1 + this.getUTCMonth()) + "-" + twoDigits(this.getUTCDate()) + " " + twoDigits(this.getUTCHours()) + ":" + twoDigits(this.getUTCMinutes()) + ":" + twoDigits(this.getUTCSeconds()); 
 
}; 
 

 

 
var date = new Date(); 
 

 
document.getElementById("date").innerHTML = date; 
 
document.getElementById("mysql_date").innerHTML = date.toMysqlFormat(); 
 
console.log(date.toMysqlFormat());
Simple date:<div id="date"></div> 
 

 
Converted Mysql Fromat: <div id="mysql_date"></div>