2
votes

Extraire le jour, le mois, l'année d'une chaîne AAAA-JJ-MM en Javascript

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!


4 commentaires

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>.


7 Réponses :


4
votes

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)).


0 commentaires

21
votes

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'));


1 commentaires

C'est élégant.



1
votes

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);


2 commentaires

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



4
votes

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"));


0 commentaires

1
votes

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)


2 commentaires

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é.



1
votes

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 }"


0 commentaires

1
votes

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));


0 commentaires