Comment convertir une chaîne en date en JavaScript ?
var st = "date in some format"
var dt = new date();
var dt_st= //st in date format same as dt
Comment convertir une chaîne en date en JavaScript ?
var st = "date in some format"
var dt = new date();
var dt_st= //st in date format same as dt
Le meilleur format de chaîne pour l'analyse syntaxique des chaînes est le format ISO de la date, associé au constructeur d'objets Date de JavaScript.
Exemples de format ISO : YYYY-MM-DD
o YYYY-MM-DDTHH:MM:SS
.
Mais attendez ! L'utilisation du "format ISO" n'est pas fiable en soi. Les chaînes sont parfois interprété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 en UTC et d'effectuer les calculs en UTC.
Pour analyser une date en UTC, ajoutez un élément 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'informations sur MDN | Date y cette réponse .
Pour assurer la compatibilité avec l'ancien Internet Explorer (les versions d'IE inférieures à 9 ne prennent pas en charge le format ISO dans le constructeur de date), vous devez diviser la représentation de la chaîne de temps en ses parties, puis vous pouvez utiliser le constructeur en utilisant les parties de temps, par exemple : new Date('2011', '04' - 1, '11', '11', '51', '00')
. Notez que le numéro du mois doit être inférieur de 1.
Méthode alternative - utiliser une bibliothèque appropriée :
Vous pouvez également profiter de la bibliothèque Moment.js qui permet d'analyser la date avec le fuseau horaire spécifié.
J'ai également dû utiliser la méthode "split the string" pour safari pour le même problème "Nan" que Paul Tomblin a soulevé. new Date('2011-04-11 11:51:00') renvoie "invalid date".
@Amos : Remarquez la lettre T, qui sépare la date et l'heure. Si vous écrivez new Date('2011-04-11T11:51:00')
la date de création est valide.
Malheureusement, je me suis heurté au problème suivant *cela ne fonctionne pas pour TOUS les utilisateurs .
Malheureusement, j'ai découvert que
var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());
retourne "Wed Apr 02 2014". Je sais que cela semble fou, mais cela arrive pour certains utilisateurs.
El une solution à toute épreuve 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());
Ce n'est pas fou du tout, l'ajustement est très probablement causé par DST à l'intérieur. Les dates au format yyyy-MM-dd
sont interprétés comme des UTC et toString renvoie le local Par conséquent, selon le fuseau horaire de l'utilisateur, le résultat peut être différent. Si vous voulez toujours avoir l'heure en UTC, vous devez utiliser toUTCString .
Je me suis tapé la tête sur ce sujet. Cela semble fonctionner, mais je ne comprends pas pourquoi vous avez utilisé parts[0]-1 et pas seulement parts[0].
@AdamYoungers En raison de Javascript, les mois sont comptés à partir de 0 : janvier - 0, février - 1, etc.
Malheureusement, il y a un problème avec cette solution. Plus de détails ici : stackoverflow.com/questions/17959660/
La sortie est inconnue, car votre code ne convertit rien en chaîne de caractères et ne produit rien.
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","-")
@MarkJones Ne faites pas confiance aux .indexOf()
car elle n'est pas compatible avec les navigateurs sans polyfils. Utilisez plutôt la méthode plus compatible .match()
o .test()
méthodes JS vanille.
Ajout de var _delimiter = _format.match(/\W/g)[0];
au début de la fonction, vous pouvez obtenir le délimiteur automatiquement et le prescind du 3ème paramètre.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
3 votes
Duplicata possible de convertir le datestring Java en date javascript y beaucoup plus
2 votes
Oh, je suis confus maintenant. Voulez-vous
Date -> String
oString -> Date
?13 votes
Envisager momentjs.com
0 votes
Solution simple : Utiliser le formatage ISOString var st = "05/05/2020" var dateTime1 = new Date(st).toISOString().replace(/T.+/, ' 00:00:00') console.log(dateTime1)
0 votes
Et si
var st = "Monday, August 10th 2020"
? Un et pour cela ?0 votes
C'est maintenant 2021, pensez à utiliser
date-fns
lib, la méthodeparse
0 votes
Je préfère
date-fns
par rapport aux autres librairies, parce qu'elle agit sur laDate
spécialement lorsque je récupère les résultats de PostgreSQL.0 votes
parse("Monday, August 10th 2020", "EEEE, mmmm do yyyy", new Date(),)
0 votes
Si vous cherchez comment formater une date en une chaîne de caractères, voir Comment formater une date en JavaScript .