2009-11-19 10 views
15

Quel serait le meilleur moyen de convertir une date au format date mysql en un objet Date javascript?Convertir une date mySQL en date Javascript

Le format de date mySQL est 'AAAA-MM-JJ' (format ISO).

+1

Êtes-vous rencontrez un problème spécifique? Qu'avez-vous essayé jusqu'à présent? Est-ce que vous rencontrez un problème en transmettant la date à l'objet Date javascript? – Zak

+0

Date.parse ('2009-01-01'); ne marche pas. essayer de trouver un moyen de le convertir. les dates arrivent via un objet json d'une autre société qui renvoie la date au format ISO. –

Répondre

37

Compte tenu de ces précisions que vous ne pouvez pas changer le format de la date d'arrivée, vous avez besoin de quelque chose comme ceci:

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

réponse originale:

y at-il une raison que vous ne pouvez pas obtenir un horodatage au lieu de la chaîne de date? Cela pourrait se faire par quelque chose comme:

SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table; 

ensuite obtenir le epoch_time en JavaScript, et il est une simple question de:

var myDate = new Date(epoch_time * 1000); 

La multiplication par 1000 est parce que JavaScript prend millisecondes, et UNIX_TIMESTAMP donne secondes .

+0

Je n'ai pas d'accès pour changer la façon dont les données me sont retournées. J'ai une date formatée ISO, j'ai besoin de le transformer clientide. –

2

UNIX timestamp (millisecondes depuis le 1er janvier 1970) serait mon choix préféré.

Vous pouvez le passer en entier et utiliser la méthode JS setTime() pour en créer un objet JS Date.

0

Vous pouvez diviser la date « - » comme séparateur et utiliser ce constructeur:

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

et comment pourrais-je le diviser comme ça? –

+0

si ds = 'AAAA-MM-JJ': ds.split ('-') –

0

Vous êtes tombé sur ce qui cherchait à faire exactement ce que l'OP voulait, et j'ai utilisé jhurshman comme réponse, mais il est incomplet car il utilisera 00:00:00 GMT-0500 (CDT) pour la partie temps car il n'est pas passé à l'objet date (var jsDate).

Dans le cas où quelqu'un d'autre cherche à créer le plein Javascriptdate object

ex:

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

Basé sur un format MySQL DATETIME

ex:

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

Vous voulez utiliser les éléments suivants:

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

Il retournera dans les navigateurs fuseau horaire actuel que vous créez l'objet de la date, mais je ne la conversion de fuseau horaire sur le backend dans la plupart des cas.

0

S'appuyant sur la réponse de Jhurisman.Si vous voulez définir comme le temps de la date bien utiliser les éléments suivants:

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

la plus courte et méthode rapide:

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

enfin un seul paquebot! Je vous remercie! – arod

+0

Bon tour! Merci beaucoup! – nobody

+0

Ne travaillait pas pour moi. J'ai changé l'instruction replace en: replace (/ [-]/g, '/') –

2

En AngularJS Way, Merci à @Jonas Sciangula rue

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

mySqlDate est au format "aaaa-mm-jj".

var javaDate = new Date(mySqlDate); 

Cette ligne de code fonctionne très bien pour moi.

+0

Fonctionne également avec le format "aaaa-mm-jj hh: ii: ss" – ling

0

Alors que JS ne possède des outils de base assez pour ce faire, il est assez simple à utiliser

/** 
 
* 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>

Questions connexes