Transformer une chaîne en une date en JavaScript
-
Utilisez la fonction
new Date()
pour convertir une chaîne en date en JavaScript -
Utilisez la fonction
Date.parse()
pour convertir une chaîne en date en JavaScript - Diviser la chaîne et la convertir en date en JavaScript
- Conclusion
Parfois, il est nécessaire de convertir une chaîne en un format de date. La chaîne peut être une valeur de date stockée sous forme de chaîne dans la base de données ou une valeur renvoyée par l’API. Dans les deux cas, cette valeur de chaîne ne peut pas être directement utilisée dans les sélecteurs de date ou dans le type d’entrée date. Par conséquent, la chaîne devra être convertie en un objet de date à afficher dans l’interface utilisateur HTML. Étant dans un format de chaîne, il n’est pas possible d’effectuer des opérations spécifiques à la date. Par conséquent, nous devons convertir la chaîne en un objet de date. Nous énumérons ici quelques façons de convertir une chaîne en date:
new Date()
Date.parse()
- Fractionner et convertir en date
Utilisez la fonction new Date()
pour convertir une chaîne en date en JavaScript
Le moyen le plus couramment utilisé pour convertir une chaîne en date est la fonction new Date()
. New Date()
prend des arguments sous diverses formes décrites ci-dessous mais renvoie un objet date.
- Aucun paramètre comme argument.
New Date()
renverra la date et l’heure actuelles du système, y compris les informations de fuseau horaire dans l’heure système locale, si aucun paramètre n’est passé à la fonctionnew Date()
. - Passer l’objet de date comme argument. Le
new Date()
renverra un objet date tel que représenté par la chaîne de date passée en argument. - Passer une date de chaîne. La partie la plus intéressante de la fonction
new Date('2018-12-3')
est qu’elle permet de convertir une date passée sous forme de chaîne comme argument en un format de date. Nous en discuterons en détail.
Passer une date de chaîne comme argument
Quand on passe une date au format chaîne à la new Date()
, elle est convertie en objet date. Le format de chaîne doit être YYYY-MM-DD
, le format ISO 8601, pour que cela fonctionne. Les autres formats de date ne peuvent pas être convertis en objet date par cette méthode. Par exemple, reportez-vous au code comme suit:
new Date('2021-05-23');
new Date('2020/2/29');
new Date('2020-14-03');
new Date('14-02-2021');
Production:
Sun May 23 2021 05:30:00 GMT+0530 (India Standard Time)
Sat Feb 29 2020 00:00:00 GMT+0530 (India Standard Time)
Invalid Date
Invalid Date
Comme vous le voyez dans les exemples ci-dessus, le seul format de chaîne accepté pour la date est 2021-05-23
et 2020/2/29
. La fonction new Date()
permet de traiter des chaînes au format YYYY-MM-DD
ou YYYY/MM/DD
. Si nous avons un format de chaîne différent qui n’est pas conforme aux normes ISO 8601, la new Date()
ne pourra pas analyser la date et reviendra comme une Date invalide
.
Remarques
new Date()
ne peut être utilisé pour convertir la chaîne en date que si elle qualifie le format ISO 8601YYYY-MM-DD hh:mm:ss
.- Pour un format différent qui ne peut pas être compris par
new Date()
, il est préférable de scinder la chaîne et de les passer comme arguments dans lanew Date()
, comme introduit plus loin dans cet article. new Date()
permet également de convertir une chaîne au format01 Mar 2020 12:30
ou encoreMM DD YYYY HH:mm
. Dans le cas où nous utilisons une valeur passée du backend via l’API pour la conversion, nous devons nous assurer que le format passé est bien compris par la fonctionnew Date()
, et il est bon de vérifier quenew Date()
renvoie un objet date valide. Sinon, le code peut casser.
Utilisez la fonction Date.parse()
pour convertir une chaîne en date en JavaScript
Date.parse()
est une autre option pour convertir la chaîne date. Il renvoie une valeur numérique au lieu d’un objet date. Par conséquent, il faudra un traitement supplémentaire si vous attendez un objet de date. Il convertit la date analysée en un nombre représentant les millisecondes écoulées depuis le 1er janvier 1970, heure de minuit. Il est similaire au format d’horodatage avec la différence qu’au lieu de secondes, Date.parse()
renvoie une valeur en millisecondes.
Date.parse('2020-11-21')
Date.parse('2019-01-01T12:30:00.000Z')
Date.parse('20-11-2021')
Date.parse('11-20-2021')
Production:
1605916800000
1546345800000
NaN
1637346600000
Il est intéressant de noter que Date.parse()
est le même que new Date()
en ce qui concerne le type de valeurs d’entrée qu’il peut accepter mais offre une meilleure vérification manuelle si la date est d’un format valide. Une telle méthode est pratique, en particulier lorsque nous avons affaire à une valeur de réponse API. Dans de tels cas, nous pouvons avoir besoin d’effectuer une vérification pour s’assurer que la valeur retournée par le backend est conforme au format de date accepté par la fonction Date.parse()
ou même la fonction new Date()
. Une simple vérification isNaN()
peut aider à identifier et à atterrir en toute sécurité dans la méthode de conversion de date.
let stringsFromAPI = ['2020-11-21', '20-11-2021'];
stringsFromAPI.forEach((d) => {
if (!isNaN(Date.parse(d))) {
console.log(new Date(d));
}
})
Production:
Sat Nov 21 2020 05:30:00 GMT+0530 (India Standard Time)
Notez qu’ici la date 20-11-2021
est au format DD-MM-YYYY
. Il ne sera donc pas compris par la fonction Date.parse()
ni par la fonction new Date()
. Par conséquent, si stringsFromAPI
était une valeur provenant du backend, alors la fonction ci-dessus ne convertira que les dates conformes au format acceptable. Le !isNaN(Date.parse(d))
rejette silencieusement la valeur de date incorrecte et enregistre la valeur dont la conversion a réussi.
Remarques
Date.parse()
est similaire aunew Date()
sauf pour le type de retour, ce qui le rend approprié pour vérifier si une valeur de date est d’un format correct et peut également être utilisé pour attribuer une date en utilisant ledateObj.setTime(Date.parse(DateString))
.- Par rapport à l’horodatage Unix, le
Date.parse()
renvoie des millisecondes qui peuvent être utilisées pour la comparaison de précision des dates même sans les convertir en objets de date réels avecnew Date()
. Date.parse()
utilise en interne lanew Date()
pour l’analyse de la date, donc les formats acceptés par la fonctionnew Date()
seront également supportés dans la fonctionDate.parse()
.
Diviser la chaîne et la convertir en date en JavaScript
Les fonctions Date.parse()
et new Date()
sont conçues sur la base du format de date étendu ISO 8601. Parfois, si la date n’est pas conforme au format attendu, nous devrons la résoudre manuellement en fractionnant la chaîne de date, en extrayant les valeurs et en les convertissant en un objet de date. Étonnamment, la new Date()
prend également en charge les paramètres de date à passer comme arguments, et nous obtenons l’objet date en sortie.
La syntaxe pour créer une date à partir d’arguments:
new Date(yearValue, IndexOfMonth, dayValue, hours, minutes, seconds)
Où,
yearValue
: doit être conforme au format ISO 8061 YYYY. Par exemple, 2021. Si on spécifie une valeur au formatYY
, cela la prendra à tort. Par exemple, le simple fait de mentionner 21 pour2021
sera considéré comme 1921 au lieu de 2021.IndexOfMonth
: commence par l’indice 0. Par conséquent, soustrayez 1 de la valeur du mois. Par exemple, pour mars, la valeur est 3, maismonthIndex
sera 2 (c’est-à-dire 3-1 = 2). L’indice du mois doit généralement se situer dans la fourchette0-11
dayValue
: Indique le jour du mois. Il doit être compris entre 1 et 31, selon le nombre de jours dans un mois. Par exemple: pour le 21-05-2021, la valeur du jour est 21hours
: l’heure de la journée. Par exemple 10 heures.minutes
: les minutes après une heure.secondes
: maintient la valeur de la seconde au-delà d’une minute.
Ce qui suit est une fonction qui prend une chaîne ayant un format de date personnalisé - DD-MM-YYYYTHH:mm:SS
et renvoie un objet date.
function convertFromStringToDate(responseDate) {
let dateComponents = responseDate.split('T');
let datePieces = dateComponents[0].split('-');
let timePieces = dateComponents[1].split(':');
return (new Date(
datePieces[2], (datePieces[1] - 1), datePieces[0], timePieces[0],
timePieces[1], timePieces[2]))
}
convertFromStringToDate('21-03-2020T11:20:30')
Production:
Sat Mar 21 2020 11:20:30 GMT+0530 (India Standard Time)
Conclusion
La fonction new Date()
la plus couramment utilisée est assez utile pour convertir une chaîne date en objet date, à condition que la chaîne soit conforme au format ISO 8601. Par rapport à la new Date()
, la fonction Date.parse()
diffère en ce sens qu’elle renvoie une valeur numérique contenant les millisecondes depuis le 1er janvier 1970 qui se sont écoulées jusqu’à la date passée en argument de chaîne. Un format de date différent peut être converti en fractionnant la chaîne de date et en passant les composants de date comme arguments à la fonction new Date()
.