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.