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: 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? 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
6 Réponses :
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"))
Que diriez-vous de mapper les positions:
[/*y*/ 4, 6, /*m*/ 2, /*d*/ 0].reduce((acc, p) => acc + date.slice(p, p + 2), "")
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))
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
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);
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);
Évitez la double jointure, faites simplement -> [... year, m, m1, d, d1] .join ("");
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