3
votes

Modification de l'ordre des caractères dans une chaîne à l'aide de JavaScript

J'attrape la date d'un formulaire sous forme de chaîne et je la transmets à une URL de demande d'API.

La chaîne de date est au format suivant: 16 02 2019 Mais l'API n'accepte une chaîne de date que dans ce format: 2019

Fondamentalement, dans ma chaîne, je dois changer la position de les 2 premiers caractères avec la position des 4 derniers caractères.

J'ai résolu le problème comme suit:

let date = e.target.elements.date.value; // 16022019

const dateFirst = date.slice(0, 2);
const dateMiddle = date.slice(2, 4);
const dateLast = date.slice(4, 8);
date = `${dateLast}${dateMiddle}${dateFirst}`; // 20190216

Mais je ne suis pas sûr que ce soit une bonne solution. Y a-t-il une meilleure façon d'obtenir le même résultat?


2 commentaires

Si vous n'avez pas gâché les index, je ne vois rien de mal. Mais ça pourrait être un one-liner (je ne vois pas le besoin de variables intermédiaires).


L'utilisation de slice est probablement rapide, facile à entretenir et donc la solution idéale. D'autres solutions pourraient être plus élégantes, mais ... qui en a besoin


6 Réponses :


5
votes

Je ne vois aucun problème avec votre méthode. au cas où vous voudriez connaître une alternative, vous pouvez essayer ceci.

Cela utilise regex pour capturer des chiffres de la largeur désirée et des endroits à l'endroit désiré.

let str = `16022019`
console.log(str.replace(/(\d{2})(\d{2})(\d{4})/,"$3$2$1"))


0 commentaires

1
votes

Que diriez-vous de mapper les positions:

[/*y*/ 4, 6, /*m*/ 2, /*d*/ 0].reduce((acc, p) => acc + date.slice(p, p + 2), "")


0 commentaires

1
votes

en utilisant la sous-chaîne

var a = '16022019';
console.log(a.substr(a.length-4,4)+a.substr(2,2)+a.substr(0,2))

à l'aide de substr

var a = '16022019';
console.log(a.substring(a.length - 4, a.length) + a.substring(2, 4) + a.substring(0, 2))


0 commentaires

1
votes

Voici une façon de travailler avec les dates:

function yyyymmdd() {
  var x = new Date();
  var y = x.getFullYear().toString();
  var m = (x.getMonth() + 1).toString();
  var d = x.getDate().toString();
  (d.length == 1) && (d = '0' + d);
  (m.length == 1) && (m = '0' + m);
  var yyyymmdd = y + m + d;
  return yyyymmdd;
}

console.log(yyyymmdd("16022019")) // outputs 20190216

Références: https://codereview.stackexchange.com/q/184459


0 commentaires

1
votes

Vous pouvez également faire quelque chose comme ceci en utilisant Array # reverse et Array # join.

const data = "16022019"

const res = data.split(/(\d{2})(\d{2})(\d{4})/).reverse().join("");

console.log(res);


0 commentaires

2
votes

Vous pouvez également utiliser l'affectation de déstructuration et paramètre rest pour le faire.

const str = `16022019`;
[d, d1, m, m1, ...year] = str.split("");
const dateStr = [...year,m,m1,d,d1].join("");
console.log(dateStr);


1 commentaires

Évitez la double jointure, faites simplement -> [... year, m, m1, d, d1] .join ("");