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
javascript
date
type-conversion
date-parsing
jslearner
la source
la source
Date -> String
ouString -> Date
?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
ouYYYY-MM-DDTHH:MM:SS
.Mais attendez! Le simple fait d'utiliser le "format ISO" ne fonctionne pas de manière fiable en soi. 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 en UTC et de faire des calculs en 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'informations sur MDN | Date et cette réponse .
Pour la compatibilité ancienne Internet Explorer (IE versions moins de 9 ne prennent pas en charge le format ISO dans le constructeur Date), vous devez diviser datetime représentation de chaîne à des parties de et ensuite vous pouvez utiliser constructeur en utilisant datetime pièces, par exemple:
new Date('2011', '04' - 1, '11', '11', '51', '00')
. Notez que le numéro du mois doit être inférieur de 1.Autre méthode - utilisez 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é.
la source
new Date('2011-04-11T11:51:00')
la date de création est valide.new Date('1970-30-02')
c'est une date invalide car il n'y a pas 30 mois dans une année. Vous ne pouvez pas déborder de mois, mais lorsque vous débordez de jours, il se résout dans Chrome et Firefox à une date valide:new Date('1970-02-30')
est alors le même jour que la nouvelle date ('1970-03-02').Malheureusement, j'ai découvert que
renvoie "Wed Apr 02 2014". Je sais que cela semble fou, mais cela arrive pour certains utilisateurs.
La solution pare-balles est la suivante:
la source
yyyy-MM-dd
sont analysées en UTC et toString renvoie l' heure locale , donc en fonction du fuseau horaire des utilisateurs, il peut très certainement retourner des résultats différents. Si vous voulez toujours l'heure en UTC, vous devez utiliser toUTCString .Et la sortie sera:
la source
la source
.indexOf()
méthode car elle n'est pas compatible avec plusieurs navigateurs sans fichiers polyfils. À la place, utilisez les méthodes JS plus compatibles.match()
ou.test()
vanilla.var _delimiter = _format.match(/\W/g)[0];
au début de la fonction, vous pouvez obtenir le délimiteur automatiquement et pré-découper le 3ème paramètre.moment.js ( http://momentjs.com/ ) est un package complet et efficace pour les dates d'utilisation et prend en charge les chaînes ISO 8601 .
Vous pouvez ajouter une date et un format de chaîne.
Et vous pouvez vérifier si une date est valide.
Quelques exemples d'affichage
Voir la documentation http://momentjs.com/docs/#/parsing/string-format/
la source
let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL'))
sorties: "il y a 3 mois | 1er février 2019"Passez-le comme argument à Date ():
Vous pouvez accéder à la date, le mois, l' année en utilisant, par exemple:
dt.getMonth()
.la source
console.log(new Date('30-08-2018'))
et reçois une date invalide01/02/2020
sur mon ordinateur (au Royaume-Uni), il retournera le 1er février où, comme si la même chose se faisait aux États-Unis, il retournera le 2 janvier. Vous ne devriez pratiquement jamais utiliser cette implémentation naïve. Utilisez plutôt le moment .Si vous pouvez utiliser la bibliothèque de moments formidables (par exemple dans un projet Node.js), vous pouvez facilement analyser votre date en utilisant par exemple
et peut accéder à l'objet de date JS via
la source
new Date(2000, 10, 1)
vous donnera "Mer 01 nov 2000 00:00:00 GMT + 0100 (CET)"Voir que 0 pour le mois vous donne janvier
la source
Pour ceux qui recherchent une solution minuscule et intelligente:
Exemple:
la source
Juste
new Date(st);
En supposant que c'est le bon format .
la source
Si vous souhaitez convertir à partir du format "jj / MM / aaaa". Voici un exemple:
Cette solution fonctionne dans les versions IE inférieures à 9.
la source
Les horodatages doivent être castés en un nombre
la source
undefined
valeur? Commevar date = new Date(undefined)
:?Date.parse
vous obtient presque ce que vous voulez. Il s'étouffe sur la partieam
/pm
, mais avec un certain piratage, vous pouvez le faire fonctionner:la source
Convertir au format pt-BR:
J'espère aider quelqu'un !!!
la source
J'ai créé un violon pour cela, vous pouvez utiliser la fonction toDate () sur n'importe quelle chaîne de date et fournir le format de date. Cela vous renverra un objet Date. https://jsfiddle.net/Sushil231088/q56yd0rp/
la source
Pour convertir une chaîne à ce jour en js, j'utilise
http://momentjs.com/
la source
J'ai créé cette fonction pour convertir n'importe quel objet Date en objet Date UTC.
la source
Encore une autre façon de le faire:
la source
Vous pouvez essayer ceci:
la source
ou
la chaîne de date au format '01 -01-1970 'ne fonctionnera pas dans FireFox, il vaut donc mieux utiliser "/" au lieu de "-" dans la chaîne de format de date.
la source
Si vous devez vérifier le contenu de la chaîne avant de convertir au format Date:
la source
J'ai créé la fonction parseDateTime pour convertir la chaîne en objet date et cela fonctionne dans tous les navigateurs (y compris le navigateur IE), vérifiez si quelqu'un est nécessaire, référence https://github.com/Umesh-Markande/Parse-String-to-Date -en-tout-navigateur
la source
Cette réponse est basée sur la réponse de Kassem mais elle traite également les années à deux chiffres. J'ai soumis une modification à la réponse de Kassem, mais au cas où elle ne serait pas approuvée, je la soumets également en tant que réponse distincte.
la source
Vous pouvez utiliser regex pour analyser la chaîne pour détailler l'heure, puis créer une date ou tout autre format de retour comme:
la source
Performance
Aujourd'hui (2020.05.08), j'effectue des tests pour les solutions choisies - pour deux cas: la date d'entrée est une chaîne ISO8601 (Ad, Bd, Cd, Dd, Ed) et la date d'entrée est un horodatage (At, Ct, Dt). Les solutions Bd, Cd, Ct ne renvoient pas d'objet js Date comme résultats, mais je les ajoute car elles peuvent être utiles mais je ne les compare pas avec des solutions valides. Ces résultats peuvent être utiles pour une analyse de date massive.
Conclusions
new Date
(Ad) est 50 à 100 fois plus rapide que moment.js (Dd) pour tous les navigateurs pour la date et l'horodatage ISOnew Date
(Ad) est environ 10 fois plus rapide queparseDate
(Ed)Date.parse
(Bd) est la plus rapide si nous devons obtenir l'horodatage de la date ISO sur tous les navigateursDétails
J'effectue un test sur MacOs High Sierra 10.13.6 sur Chrome 81.0, Safari 13.1, Firefox 75.0. La solution
parseDate
(Ed) utilisenew Date(0)
et définit manuellement les composants de date UTC.Afficher l'extrait de code
Résultats pour chrome
la source
Les chaînes de données ISO 8601, aussi excellentes que la norme, ne sont toujours pas largement prises en charge.
Ceci est une excellente ressource pour déterminer le format de chaîne de données que vous devez utiliser:
http://dygraphs.com/date-formats.html
Oui, cela signifie que votre chaîne de données peut être aussi simple que par opposition à
"2014/10/13 23:57:52"
au lieu de"2014-10-13 23:57:52"
la source
la source
utilisez ce code: (mon problème a été résolu avec ce code)
}
la source
J'ai écrit une fonction réutilisable que j'utilise lorsque j'obtiens des chaînes de date du serveur.
vous pouvez passer le délimiteur souhaité (/ - etc.) qui sépare le jour mois et année afin d'utiliser la
split()
méthode.vous pouvez le voir et le tester sur cet exemple de travail .
la source
Une autre façon de le faire consiste à créer une expression régulière avec des groupes de capture nommés sur la chaîne de format, puis à utiliser cette expression régulière pour extraire le jour, le mois et l'année de la chaîne de date:
la source