Convertir MySQL DateTime stamp en format de date 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 fonctionner dans la fonction Date() de JavaScript, par exemple:- Date('AAAA, MM, DD, HH, MM, SS);

Merci!

144
demandé sur Zeeshan 2010-06-19 17:06:27

13 réponses

Certaines des réponses données ici sont soit trop compliquées ou ne fonctionneront tout simplement pas (du moins, pas dans tous les navigateurs). Si vous prenez du recul, vous pouvez voir que L'horodatage MySQL a chaque composant du temps dans le même ordre que les arguments requis par le constructeur Date().

Tout ce qui est nécessaire est une division très simple sur 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 équitable: cela suppose que votre serveur MySQL génère des dates UTC (ce qui est la valeur par défaut, et recommandé s'il n'y a pas composant de fuseau horaire de la chaîne).

381
répondu Andy E 2016-07-14 08:13:04

Pour ajouter à l'excellente réponse Andy E 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, étant donné une date/heure MySQL sous la forme "YYYY-MM-DD HH:MM:SS" ou même la forme courte (seule date) "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());
59
répondu Marco Demaio 2017-05-23 12:02:48

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

Une colonne datetime MySQL peut être convertie en horodatage unix VIA:

SELECT unix_timestamp(my_datetime_column) as stamp ...

Nous pouvons créer un nouvel objet de date JavaScript en utilisant le constructeur qui nécessite des millisecondes depuis l'époque. La fonction unix_timestamp renvoie des secondes depuis l'époque, nous devons donc multiplier par 1000:

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

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

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

J'espère que cela aide.

27
répondu Symen Timmermans 2013-11-20 16:29:48

Une doublure 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-liner 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)
12
répondu aleemb 2015-07-30 16:09:31

Les versions récentes de JavaScript liront une date formatée ISO8601, donc tout ce que vous avez à faire est de changer l'espace en un 'T', en faisant quelque chose comme l'un des éléments suivants:

#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
répondu Jeff 2012-09-24 13:20:00

Pour ajouter encore plus à la solution de Marco. J'ai prototypé directement sur 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
répondu Adrian Bartholomew 2014-11-02 20:03:56

De Réponse D'Andy , Pour AngularJS-Filter

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
répondu jaym 2017-05-23 12:34:45
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
répondu bhowden 2014-03-26 21:29:19

Vous pouvez d'abord donner à L'objet Date (classe) de JavaScript la nouvelle méthode ' fromYMD ()' pour convertir le format de date YMD de MySQL en format JavaScript en divisant le format YMD en composants et en utilisant ces composants de date:

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

Maintenant, vous pouvez 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
répondu sbrbot 2016-07-24 13:00:38

Vous pouvez utiliser l'horodatage unix pour diriger:

SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;

Ensuite, obtenez le epoch_time en JavaScript, et c'est une simple question de:

var myDate = new Date(epoch_time * 1000);

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

0
répondu bharat 2017-03-29 06:54:28

Il existe un moyen plus simple, la chaîne d'horodatage sql:

2018-07-19 00:00:00

Le format le plus proche de l'horodatage pour Date() à recevoir est le suivant, donc remplacez l'espace vide pour "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 Jul 19 2018 00: 00: 00 GMT-0300 (Horário Padrão de Brasília)

0
répondu Caique Matos 2018-07-05 14:19:51

Une recherche rapide dans google a fourni ceci:

 function mysqlTimeStampToDate(timestamp) {
    //function parses mysql datetime string and returns javascript Date object
    //input has to be in this format: 2007-06-05 15:26:02
    var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
    var parts=timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
    return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
  }

Source:http://snippets.dzone.com/posts/show/4132

-2
répondu Stefan Valianu 2010-06-19 13:11:30

Pourquoi ne pas faire ceci:

var d = new Date.parseDate( "2000-09-10 00:00:00", 'Y-m-d H:i:s' );
-3
répondu josh803316 2011-11-24 21:04:28