Je trouve la meilleure solution pour extraire le jour, le mois, l'année d'une chaîne avec AAAA-JJ-MM
en Javascript:
Extrait de:
2019-25-01
Pour objecter:
{jour: 25, mois: 01, année: 2019}
Quelle est la meilleure façon de procéder. Merci d'avance!
7 Réponses :
J'utiliserais une expression régulière pour faire correspondre
chaque séquence de nombres, mapper le tableau de chaînes correspondantes en nombres, déstructurer en variables, puis créer un objet à partir de celle-ci:
const [year, day, month] = '2019-25-01' .match(/\d+/g) .map(Number); const obj = { day, month, year }; console.log(obj);
Notez que les nombres ne peuvent pas avoir de zéros non significatifs. Si vous voulez que le mois ait un zéro non significatif, utilisez plutôt une chaîne (supprimez simplement .map(Number)
).
Vous pouvez diviser, déstructurer et renvoyer un nouvel objet.
const getDate = string => (([year, day, month]) => ({ day, month, year }))(string.split('-')); console.log(getDate('2019-25-01'));
C'est élégant.
Vous pouvez split ()
pour le faire
var value = "2019-25-01"; var year = value.substring(0,4); var day = value.substring(5,7); var month = value.substring(8,10); var str = "{day:" + day + ",month:" + month + ",year:" + year + "}"; console.log(str);
Hmm cela attend un format spécifique. "2019-1-2" ne fonctionnera pas (vous ne vous êtes pas séparé au fait)
oui, mais je ne sais pas si cela correspond au modèle AAAA-JJ-MM
mentionné par l'OP
Ceci est une solution assez courte et rapide qui ne fonctionnera que pour ce format et dans ES6
function toNumber(text) { text = text - 0; return isNaN(text) ? 0 : text; } function getJsonDate(text) { var {0: year, 1: day, 2: month } = text.split("-").map(toNumber); return { day, month, year}; } console.log(getJsonDate("2019-25-1"));
Si vous avez besoin que les champs soient des nombres, vous pouvez ajouter une carte, comme ceci:
function getJsonDate(text) { var {0: year, 1: day, 2: month } = text.split("-"); return { day, month, year}; } console.log(getJsonDate("2019-25-1"));
Utilisez .split () .
let date = "2019-25-01" let dateArr = date.split('-') let obj = { day: dateArr[1], month: dateArr[2], year: dateArr[0] } console.log(obj)
Vous pouvez enregistrer une opération en stockant le fractionnement dans un tableau avant de construire l'objet
@Cid Merci! J'ai totalement oublié ça. Ici, je l'ai réparé.
Pour JSON comme la structure
d="2019-25-01"; x=d.split("-"); json="{ day: "+x[1]+", month: "+x[2]+", year: "+x[0]+" }"; >>"{ day: 25, month: 01, year: 2019 }"
Ici, vous avez une approche qui n'a pas besoin de faire le mappage str -> array -> object
, il convertira la string
directement en objet
et peut également être utilisé pour une date plus généralisée avec l'heure. Il est basé sur la fonction replacement
qui peut être utilisée sur String :: replace ()
const strDate = "2019-25-01"; const splitDate = (str) => { let [date, year, day, month] = str.match(/(\d+)-(\d+)-(\d+)/); return {year, month, day}; } console.log(splitDate(strDate));
Une autre méthode strictement liée à votre format de date pourrait être la suivante:
const dateStr1 = "2019-25-01"; const dateMap1 = ["year", "day", "month"]; const dateStr2 = "2019-25-01 17:07:56"; const dateMap2 = ["year", "day", "month", "hour", "minute", "second"]; const splitDate = (str, map) => { let obj = {}, i = 0; str.replace(/\d+/g, (match) => obj[[map[i++] || i - 1]] = match); return obj; } console.log(splitDate(dateStr1, dateMap1)); console.log(splitDate(dateStr2, dateMap2));
Vous avez sûrement déjà essayé du codage pour résoudre ce problème. Veuillez nous montrer ce que vous avez essayé jusqu'à présent.
@Cid: ce n'est pas l'un des formats pris en charge pour
Date.parse
; donc, pas une dupe (car cela nécessite des étapes supplémentaires).@Amadan ah, c'est vrai, merci de m'avoir indiqué cela. Je n'ai pas remarqué que la date était dans un format stupide, non triable et ainsi de suite.
@Cid: Stupide ou pas, c'est officiel dans trois pays < / a>.