• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • JDToFrench()

    (PHP 4, PHP 5, PHP 7)

    转变一个Julian Day计数到French Republican历法的日期

    说明

    jdtofrench (int $juliandaycount) : string

    转变一个Julian Day计数到French Republican历法的日期。

    参数

    $julianday

    一个julian天数

    返回值

    以"月/日/年"形式的french revolution日期

    参见

    • frenchtojd()从一个French Republican历法的日期得到Julian Day计数。
    • cal_from_jd()转换Julian Day计数到一个支持的历法。
    If you want to convert a date later than September 22nd 1806, you could use this function. It's a bit crude and due to the fact the original function terminates in the middle of 1806, it uses 1805 as it's 'terminus post quem'.
    <?php
    function extended_jdtofrench ($juliandate) {
      if ($juliandate > 2380945) {
        // jdtofrench () only accepts dates until september 1806
        $gregorian_date = jdtogregorian ($juliandate);
        $temp = explode ('/', $gregorian_date);
        $year = $temp[2];
        $juliandate = gregoriantojd ($temp[0], $temp[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;
    }
    ?>
    
    Here is a small piece of code to obtain the string data for a correctly converted gregorian date:
    <?php
    $arDateFrench = gregorian2FrenchDateArray(11, 9, 1799) ;
    echo $arDateFrench[1] . " " . $arDateFrench[0] . " " . $arDateFrench[2] ;
    /* the output will be:
      18 Brumaire VIII
    */
    function gregorian2FrenchDateArray($m, $d, $y)
    {
      $julian_date = gregoriantojd($m, $d, $y);
      $french = jdtofrench($julian_date);
      if($french == "0/0/0")
        return "" ;
      $arD = split("/", $french) ;
      
      // get the month name 
      $monthname = FrenchMonthNames($arD[0]) ;
      
      /* convert the year number to roman digits (as most historians do and documents of the time did */
      $stryear = decrom($arD[2]) ;
      return array($monthname, $arD[1], $stryear ) ;
    }
    function FrenchMonthNames($mo)
    {
      /* The names have been invented by Fabre d'Églantine, a second or rather third rank poet
    of primarily pastoral poems, with each name referring to the respective period in the agricultural year; e.g. "Vendémiaire" (approx. September) is derived from "vendange" ("harvest"), "Brumaire" (Ocotober/November) from "brume" ("fog") and so on ...   */
      
      
      $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] ;
      
    }
    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;
    }
    ?>
    
    Also note that there are few date converters handling French calendar outside the jdtofrench covered range.
    Very limited function:
    (extract from source of 4.3.3)
    These routines only convert dates in years 1 through 14 (Gregorian dates 22 September 1792 through 22 September 1806). This more than covers the period when the calendar was in use.
     
    Pour les franais :
    Ces routines ne converitssent les dates que de l'an 1  14 (du 22 septembre 1792 au 22 septembre 1806). Cela couvre plus que la priode pendant laquelle le calendrier  t utilis.

    上篇:JDMonthName()

    下篇:JDToGregorian()