Skip to content

Instantly share code, notes, and snippets.

@nltesown
Created December 5, 2019 15:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nltesown/7ce8bda0a492b8f457581cf3cf079374 to your computer and use it in GitHub Desktop.
Save nltesown/7ce8bda0a492b8f457581cf3cf079374 to your computer and use it in GitHub Desktop.
Concaténation "intelligente" de dates de début / date de fin
/**
* concatDates
* @description
* Concaténation "intelligente" de dates de début / date de fin.
* Cette fonction utilise uniquement une méthode textuelle et repose sur le fait que les deux dates sont construites sur le même modèle.
* Les éléments constituant les dates doivent aller du plus court au plus long (jour, mois, année).
* Elle ne garantit aucunement la validité, en particulier que la seconde date est postérieure à la première.
* Si les deux dates sont identiques, on renvoie la date seule. * @example
* ("1 jan 2016", "31 déc 2016", " ", "", "-") => "1 jan-31 déc 2016"
* ("16 février 2019", "18 février 2019", " ", "Du", "au") => "Du 16 au 18 février 2019"
* ("16 février 2019", "18 février 2019", " ", "Du", "au") => "Du 16 au 18 février 2019"
* @param {string} date1 Chaîne de la première date.
* @param {string} date2 Chaîne de la seconde date (postérieure à la première)
* @param {string} separator Séparateur utilisé par la chaîne de dates (p. ex. " ").
* @param {string} prefix1 Préfixe à ajouter devant le premier élément de date en sortie (p. ex. "Du ").
* @param {string} prefix2 Préfixe à ajouter devant le second élément de date en sortie (p. ex. " au ").
* @param {string} prefix3 Préfixe à ajouter devant la date en sortie quand elle est seule (p. ex. "Le ").
* @returns {string} Chaîne des deux dates concaténées.
*/
function concatDates(
date1,
date2,
separator = " ",
prefix1 = "",
prefix2 = "-",
prefix3 = ""
) {
let o = _([date1.split(separator), date2.split(separator)])
.unzip()
.thru(d => {
let doStop = false;
return _(d).reduceRight(
(acc, v) => {
if (!(v[0] === v[1] && doStop === false)) {
doStop = true;
acc[0].unshift(v[0]);
}
acc[1].unshift(v[1]);
return acc;
},
[[], []]
);
})
.value();
if (o[0].length === 0) return `${prefix3}${o[1].join(separator)}`;
return `${prefix1}${o[0].join(separator)}${prefix2}${o[1].join(separator)}`;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment