Question Conversion d'une chaîne en une date en JavaScript


Comment puis-je convertir une chaîne en une date en JavaScript?

var st = "date in some format"
var dt = new date();

var dt_st= //st in date format same as dt

419
2018-04-11 09:21


origine


Réponses:


Le meilleur format de chaîne pour l'analyse de chaîne est le format ISO de date avec le constructeur d'objet JavaScript Date.

Exemples de format ISO: YYYY-MM-DD ou YYYY-MM-DDTHH:MM:SS.

Mais attendez!  L'utilisation du "format ISO" ne fonctionne pas de manière fiable. Les chaînes sont parfois analysées en UTC et parfois en heure locale (en fonction du fournisseur et de la version du navigateur). La meilleure pratique devrait toujours être de stocker les dates au format UTC et d'effectuer des calculs au format UTC.

Pour analyser une date en UTC, ajoutez un Z - par exemple.: new Date('2011-04-11T10:20:30Z').

Pour afficher une date en UTC, utilisez .toUTCString(),
pour afficher une date dans l'heure locale de l'utilisateur, utilisez .toString().

Plus d'infos sur MDN | Rendez-vous amoureux et cette réponse.

Pour l'ancienne compatibilité d'Internet Explorer (les versions IE inférieures à 9 ne prennent pas en charge le format ISO dans le constructeur Date), vous devez fractionner la représentation des chaînes datetime en ses parties, puis utiliser un constructeur utilisant des parties datetime, par exemple: new Date('2011', '04' - 1, '11', '11', '51', '00'). Notez que le numéro du mois doit être 1 de moins.


Autre méthode - utilisez une bibliothèque appropriée:

Vous pouvez également profiter de la bibliothèque Moment.js cela permet d'analyser la date avec le fuseau horaire spécifié.


553
2018-04-11 09:53



Malheureusement, j'ai découvert que

var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());

renvoie "Wed Apr 02 2014". Je sais que cela semble fou, mais cela arrive pour certains utilisateurs.

le solution pare-balles est le suivant:

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());


164
2018-04-03 10:55



var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

Et la sortie sera:

dt => Date {Fri Apr 26 2013}

96
2018-04-26 11:27



function stringToDate(_date,_format,_delimiter)
{
            var formatLowerCase=_format.toLowerCase();
            var formatItems=formatLowerCase.split(_delimiter);
            var dateItems=_date.split(_delimiter);
            var monthIndex=formatItems.indexOf("mm");
            var dayIndex=formatItems.indexOf("dd");
            var yearIndex=formatItems.indexOf("yyyy");
            var month=parseInt(dateItems[monthIndex]);
            month-=1;
            var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
            return formatedDate;
}

stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")

65
2017-09-21 17:28



Passez-le en argument à Date ():

var st = "date in some format"
var dt = new Date(st);

Vous pouvez accéder à la date, au mois, à l'année en utilisant, par exemple: dt.getMonth().


22
2018-04-11 09:26



new Date(2000, 10, 1) vous donnera "Wed Nov 01 2000 00:00:00 GMT + 0100 (CET)"

Voir que 0 pour mois vous donne Janvier


17
2018-04-11 09:25



Si vous pouvez utiliser le formidable moment bibliothèque (par exemple, dans un projet Node.js), vous pouvez facilement analyser votre date, par ex.

var momentDate = moment("2014-09-15 09:00:00");

et peut accéder à l'objet date JS via

momentDate ().toDate();

16
2017-09-22 09:08



moment.js (http://momentjs.com/) est un paquet complet et bon pour les dates d'utilisation et les supports Chaînes ISO 8601.

Vous pouvez ajouter la date et le format de la chaîne.

moment("12-25-1995", "MM-DD-YYYY");

Et vous pouvez vérifier si la date est valide.

moment("not a real date").isValid(); //Returns false

Voir la documentation http://momentjs.com/docs/#/parsing/string-format/

Recommandation: Je recommande d'utiliser un paquet pour les dates contenant beaucoup de formats, car la gestion du temps et du format du fuseau horaire est vraiment un gros problème, le moment js résout beaucoup de formats. Vous pouvez facilement analyser une date à partir d'une simple chaîne à ce jour mais je pense que c'est un travail difficile pour supporter tous les formats et les variations de dates.


12
2018-03-07 15:47



Pour ceux qui recherchent une solution minuscule et intelligente:

String.prototype.toDate = function(format)
{
  var normalized      = this.replace(/[^a-zA-Z0-9]/g, '-');
  var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
  var formatItems     = normalizedFormat.split('-');
  var dateItems       = normalized.split('-');

  var monthIndex  = formatItems.indexOf("mm");
  var dayIndex    = formatItems.indexOf("dd");
  var yearIndex   = formatItems.indexOf("yyyy");
  var hourIndex     = formatItems.indexOf("hh");
  var minutesIndex  = formatItems.indexOf("ii");
  var secondsIndex  = formatItems.indexOf("ss");

  var today = new Date();

  var year  = yearIndex>-1  ? dateItems[yearIndex]    : today.getFullYear();
  var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
  var day   = dayIndex>-1   ? dateItems[dayIndex]     : today.getDate();

  var hour    = hourIndex>-1      ? dateItems[hourIndex]    : today.getHours();
  var minute  = minutesIndex>-1   ? dateItems[minutesIndex] : today.getMinutes();
  var second  = secondsIndex>-1   ? dateItems[secondsIndex] : today.getSeconds();

  return new Date(year,month,day,hour,minute,second);
};

Exemple:

"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");

11
2017-07-26 15:14



Si vous souhaitez convertir à partir du format "jj / MM / aaaa". Voici un exemple:

var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var arrayDate = stringDate.match(pattern);
var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);

Cette solution fonctionne dans les versions d'IE inférieures à 9.


10
2018-06-22 14:29