web-dev-qa-db-fra.com

Convertir le timbre DateTime MySql au format de date de JavaScript

Est-ce que quelqu'un sait comment je peux prendre une valeur de type de données MySQL datetime, telle que YYYY-MM-DD HH:MM:SS et l'analyser ou la convertir pour qu'elle fonctionne dans la fonction Date() de JavaScript, par exemple: - Date ('AAAA, MM, JJ, HH, MM, SS) ;

Je vous remercie!

147
dzm

Certaines des réponses données ici sont soit compliquées, soit tout simplement ne fonctionneront pas (du moins, pas dans tous les navigateurs). Si vous faites un pas en arrière, vous pouvez voir que l'horodatage MySQL a chaque composant de l'heure dans le même ordre que les arguments requis par le constructeur Date().

Tout ce dont vous avez besoin est une division très simple de la chaîne:

// Split timestamp into [ Y, M, D, h, m, s ]
var t = "2010-06-09 13:12:01".split(/[- :]/);

// Apply each element to the Date function
var d = new Date(Date.UTC(t[0], t[1]-1, t[2], t[3], t[4], t[5]));

console.log(d);
// -> Wed Jun 09 2010 14:12:01 GMT+0100 (BST)

Avertissement positif: cela suppose que votre serveur MySQL émet des dates UTC (valeur par défaut, recommandée si aucun composant de fuseau horaire n'est spécifié dans la chaîne).

391
Andy E

Pour ajouter à l'excellent Andy E réponse une fonction d'usage courant pourrait être:

Date.createFromMysql = function(mysql_string)
{ 
   var t, result = null;

   if( typeof mysql_string === 'string' )
   {
      t = mysql_string.split(/[- :]/);

      //when t[3], t[4] and t[5] are missing they defaults to zero
      result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);          
   }

   return result;   
}

De cette façon, avec une date/heure MySQL sous la forme "YYYY-MM-DD HH:MM:SS" ou même sous la forme abrégée (date uniquement) "YYYY-MM-DD", vous pouvez faire:

var d1 = Date.createFromMysql("2011-02-20");
var d2 = Date.createFromMysql("2011-02-20 17:16:00");
alert("d1 year = " + d1.getFullYear());
60
Marco Demaio

Je pense que j'ai peut-être trouvé un moyen plus simple, que personne n'a mentionné.

Une colonne MySQL DATETIME peut être convertie en un horodatage Unix via:

SELECT unix_timestamp(my_datetime_column) as stamp ...

Nous pouvons créer un nouvel objet Date JavaScript en utilisant le constructeur qui nécessite des millisecondes depuis l’époque. La fonction unix_timestamp retourne les secondes depuis l’époque, il faut donc multiplier par 1000:

SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...

La valeur résultante peut être utilisée directement pour instancier un objet Date Javascript correct:

var myDate = new Date(<?=$row['stamp']?>);

J'espère que cela t'aides.

28
Symen Timmermans

Un liner pour les navigateurs modernes (IE10 +):

var d = new Date(Date.parse("2010-06-09 13:12:01"));
alert(d); // Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)

Et juste pour le plaisir, voici un one-line qui fonctionnera sur les anciens navigateurs (maintenant corrigé):

new (Function.prototype.bind.apply(Date, [null].concat("2010-06-09 13:12:01".split(/[\s:-]/)).map(function(v,i){return i==2?--v:v}) ));
alert(d); // Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)
13
aleemb

Les versions récentes de JavaScript lisent une date au format ISO8601. Il vous suffit donc de modifier l'espace en "T", en effectuant l'une des opérations suivantes:

#MySQL
select date_format(my_date_column,'%Y-%m-%dT%T') from my_table;

#PHP
$php_date_str = substr($mysql_date_str,0,10).'T'.substr($mysql_date_str,11,8);

//JavaScript
js_date_str = mysql_date_str.substr(0,10)+'T'+mysql_date_str.substr(11,8);
7
Jeff

Pour ajouter encore plus à la solution de Marco. J'ai prototypé directement à l'objet String.

String.prototype.mysqlToDate = String.prototype.mysqlToDate || function() {
    var t = this.split(/[- :]/);
    return new Date(t[0], t[1]-1, t[2], t[3]||0, t[4]||0, t[5]||0);
};

De cette façon, vous pouvez aller directement à:

var mySqlTimestamp = "2011-02-20 17:16:00";
var pickupDate = mySqlTimestamp.mysqlToDate();
2

From Andy's Answer , Pour AngularJS - Filtre

angular
    .module('utils', [])
.filter('mysqlToJS', function () {
            return function (mysqlStr) {
                var t, result = null;

                if (typeof mysqlStr === 'string') {
                    t = mysqlStr.split(/[- :]/);

                    //when t[3], t[4] and t[5] are missing they defaults to zero
                    result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);
                }

                return result;
            };
        });
2
jaym

Il existe un moyen plus simple, chaîne de timestamp SQL: 

2018-07-19 00:00:00

Le format le plus proche de l'horodatage à recevoir par Date () est le suivant: remplacez donc l'espace par "T":

var dateString = media.intervention.replace(/\s/g, "T");

"2011-10-10T14: 48: 00"

Ensuite, créez l'objet date:

var date = new Date(dateString);

le résultat serait l'objet date:

Jeu. 19 juil. 2018 00:00:00 GMT-0300 (Horário Padrão de Brasília)

1
Caique Matos
var a=dateString.split(" ");
var b=a[0].split("-");
var c=a[1].split(":");
var date = new Date(b[0],(b[1]-1),b[2],b[0],c[1],c[2]);
1
bhowden

Tout d'abord, vous pouvez donner à l'objet Date (classe) de JavaScript la nouvelle méthode 'fromYMD ()' pour convertir le format de date YMD de MySQL au format JavaScript en divisant le format YMD en composants et en utilisant les composants de date suivants:

Date.prototype.fromYMD=function(ymd)
{
  var t=ymd.split(/[- :]/); //split into components
  return new Date(t[0],t[1]-1,t[2],t[3]||0,t[4]||0,t[5]||0);
};

Vous pouvez maintenant définir votre propre objet (funcion dans le monde JavaScript):

function DateFromYMD(ymd)
{
  return (new Date()).fromYMD(ymd);
}

et maintenant vous pouvez simplement créer une date à partir du format de date MySQL;

var d=new DateFromYMD('2016-07-24');
1
sbrbot