HTML5 / CSS 2.x/3 / PHP / MySQL ...

Le calendrier révolutionnaire

Le calendrier révolutionnaire a été utilisé pendant quelques années, après la révolution française.

Son système s'appuie sur des mois de 30 jours, chaque mois étant découpé en décades.

Même s'il n'est plus en vigeur, il peut être extrapolé sans problème pour donner la date du jour - ou toute autre date - sous sa forme révolutionnaire.

C'est aussi le premier calendrier qui se voulait complètement laïque, car les noms des jours et des mois ne font référence à aucune divinité présente ou passée, contrairement à notre calendrier grégorien qui fait référence aux dieux de la Rome Antique (Jeudi = Jupiter (Jovis dies), Vendredi = Vénus Veneris dies...).

Notre classe Republican

class Republican {
 
    /**
     * Traduit le numéro du mois en son nom en clair
     * @param  int     $mo   numéro du mois
     * @return string  nom du mois
     */
    function FrenchMonthNames($mo) {
        /* Les noms ont été inventés par Fabre d'Églantine */
        $arMo = array(
            "Vendémiaire", "Brumaire", "Frimaire",
            "Nivôse", "Pluviôse", "Ventôse",
            "Germinal", "Floréal", "Prairial",
            "Messidor", "Thermidor",
            "Fructidor", "Sansculottide");
        if ($mo < count($arMo) + 1)
            return $arMo[$mo - 1];
    }
 
    /**
     * Traduit le numéro du jour en son nom en clair
     * @param  int     $da   numéro du jour
     * @return string  nom du jour
     */
    function FrenchDayNames($da) {
        $da = (int) $da - 1;
        $da = $da % 10;
        $arDa = array(
            "Primidi", "Duodi", "Tridi",
            "Quartidi", "Quintidi", "Sextidi",
            "Septidi", "Octidi", "Nonidi",
            "Décadi");
        return $arDa[$da];
    }
 
    /**
     * Conversion décimale en chiffres romains
     * @param  int     $dec
     * @return string  valeur en chiffres romains
     */
    function decrom($dec) {
        $digits = array(
            1 => "I", 4 => "IV",
            5 => "V", 9 => "IX",
            10 => "X", 40 => "XL",
            50 => "L", 90 => "XC",
            100 => "C", 400 => "CD",
            500 => "D", 900 => "CM",
            1000 => "M"
        );
        krsort($digits);
        $retval = "";
        foreach ($digits as $key => $value) {
            while ($dec >= $key) {
                $dec-=$key;
                $retval.=$value;
            }
        }
        return $retval;
    }
 
    /**
     * Convertit une date julienne en date du calendrier républicain étendu
     * @param  int     $juliandate  date julienne sous forme d'entier
     * @return string
     */
    function extended_jdtofrench($juliandate) {
        if ($juliandate > 2380945) {
            /* car jdtofrench() n'accepte que les dates antérieures à septembre 1806 */
            $gregorian_date = jdtogregorian($juliandate);
            $temp = explode('/', $gregorian_date);
            $year = $temp[2];
            $juliandate = gregoriantojd($temp[0], $temp[1] + 1, 1805);
            $republican_date = jdtofrench($juliandate);
            $republican_date = explode('/', $republican_date);
            $diff = $year - 1805;
            $republican_date[2] = $republican_date[2] + $diff;
        } else {
            $republican_date = jdtofrench($juliandate);
        }
        return $republican_date;
    }
 
    /**
     * Convertit une date entrée au format JJ/MM/AAAA en date révolutionnaire
     * @param  string  $date
     * @return array
     */
    function gregorian2FrenchDateArray($date) {
        list($d, $m, $y) = explode('/', $date);
        $arD = $this->extended_jdtofrench(gregoriantojd($m, $d, $y));
 
        // cas où on a une rreur de conversion
        if ($french == "0/0/0") {
            return "";
        }    
        // récupération du nom du mois
        $dayname = $this->FrenchDayNames($arD[1]);
 
        // récumération du nom du mois
        $monthname = $this->FrenchMonthNames($arD[0]);
 
        // conversion année en chiffres romains
        $stryear = $this->decrom($arD[2]);
 
        return array($dayname, $monthname, $arD[1], $stryear);
    }
 
    /**
     * Renvoie une date en texte clair depuis une date JJ/MM/AAAA
     * @param  string   $date
     * @return string 
     */
    function toRepublican($date) {
        $arDateFrench = $this->gregorian2FrenchDateArray($date);
        return $arDateFrench[0] . ", " . $arDateFrench[2] . " " 
               . $arDateFrench[1] . " " . $arDateFrench[3];
    }
 
}

Sauvez ce code dans un fichier nommé Republican.class.php dans le sous-répertoire inc.

Utilisation de cette classe

L'utilisation de cette classe est vraiment simplissime, exemple, pour afficher la date du jour en format révolutionnaire:

Aujourd'hui: <?php
require_once 'inc/Republican.class.php';
$repDate = new Republican(); ?>
<b style="color:red;"><?php echo $repDate->toRepublican(date('d/m/Y')); ?></b>

affiche:
   Aujourd'hui: Duodi, 2 Floréal CCXIX

si la date du jour est le 21/04/2011.

Toute notre classe s'appuie sur des fonctions du module calendar de PHP.

Ce module est en général disponible sur tous les serveurs.

Tous les articles sur ce thème