Months v1 Gregorien/Republicain

avec boucle for

by toubia95

HTML

<input type="text" name="letters" id="letters" value="27 frimaire an XI" placeholder="Année en toutes lettres">
<button type="button" id="button">=></button>
<input type="text" name="numbers" id="numbers">
<p>Exemples :
    <ul>
        <li>28 août 2015</li>
        <li>28 déc 2010</li>
        <li>6 fevr. 2007</li>
        <li>28 Xbre 1789</li>
        <li>10/12/2013</li>
        <li>23-09-2006</li>
        <li>12.06.2014</li>
        <li>23//08.-2013</li>
        <li>27 frimaire an XI</li>
        <li>24 vendemiaire an 8</li>
        <li>La loi du 18 germinal an III instaura en France l'usage du système métrique.</li>
        <li>Le 18 Brumaire an III préluda au Consulat.</li>
        <li>Le 9 Thermidor an III.</li>
        <li>La journée du 9 thermidor de l'an III fut fatale à Robespierre.</li>
        <li>le Sextidi, 6 messidor, décade 28, de l'an I.</li>
        <li>le Sextidi, 6 messidor, décade 28, an I.</li>
    </ul>
</p>

CSS

/*
- Commencer par vérifier si ce n'est pas une date républicaine, puis sinon, transformer en gregorienne

\s((\d{1,2})(er)?)\s((vend(é|e)miaire)|(brumaire)|(frimaire)|(niv(ô|o)se)|(pluvi(ô|o)se)|(vent(ô|o)se)|(germinal)|(flor(é|e)al)|(prairial)|(messidor)|(thermidor)|(fructidor)|(san(s-)?culottides)|(jour(s)?\scompl(é|e)mentaire(s)?))\s(an)\s([XVI]{1,4}|\d{1,2})

*/
 #letters {
    width: 200px;
}
#numbers {
    width: 300px;
}

JavaScript

$('#button').click(function () {
    var selection = $('#letters').val();
    if (selection.match(/\Wan\s/gi)) {
        //if( /\Wan\s/gi.test(selection) ) { // moins rapide que match dans ce cas
        $("#numbers").val(republicain(selection));
    } else {
        $("#numbers").val(gregorien(selection));
    }
});

var gregorien = function (str) {
    var array = {
        "jan(v)?(\\.)?(ier)?": "/1/",
            "f(é|e)v(r)?(\\.)?(ier)?": "/2/",
            "mar(s|\\.)?": "/3/",
            "avr(il|\\.)?": "/4/",
            "mai": "/5/",
            "ju(i)?n": "/6/",
            "ju(i)?l(\\.)?(let)?": "/7/",
            "ao(u|û)(t|\\.)?": "/8/",
            "sep(t)?(\\.)?(embre)?": "/9/",
            "7bre": "/9/",
            "oct(obre|\\.)?": "/10/",
            "8bre": "/10/",
            "nov(embre|\\.)?": "/11/",
            "9bre": "/11/",
            "d(é|e)c(embre|\\.)?": "/12/",
            "Xbre": "/12/",
        //"\\+$": "", //addition for centuries
        "[^-()\\d/*+.]": ""
    };
    for (var val in array) {
        str = str.replace(new RegExp(val, "gi"), array[val]);
    }
    var res = str.split(/[\/\.-]{1,}/gi);
    return new Date(res[2], res[1] - 1, res[0]);
};

var republicain = function (str) {
    var array = {
        "vend(é|e)miaire": "/1/",
            "brumaire": "/2/",
            "frimaire": "/3/",
            "niv(ô|o)se": "/4/",
            "pluvi(ô|o)se": "/5/",
            "vent(ô|o)se": "/6/",
            "germinal": "/7/",
            "flor(é|e)al": "/8/",
            "prairial": "/9/",
            "messidor": "/10/",
            "thermidor": "/11/",
            "fructidor": "/12/",
            "san(s-)?culottide(s)?": "/13/",
            "jour(s)?\\scompl(é|e)mentaire(s)?": "/13/",
            "an\\sXIII": "13",
            "an\\sVIII": "8",
            "an\\sXIV": "14",
            "an\\sXII": "12",
            "an\\sVII": "7",
            "an\\sIII": "3",
            "an\\sIX": "9",
            "an\\sIV": "4",
      ...