文字

GregorianToJD

(PHP 4, PHP 5, PHP 7)

GregorianToJD转变一个Gregorian历法日期到Julian Day计数

说明

int gregoriantojd ( int $month , int $day , int $year )

Gregorian历法的合理范围是4714 B.C. 至 9999 A.D.

虽然这个函数可以处理4714 B.C.以前的日期,但是没有意义。Gregorian历法直到1582年10年15日(或是Julian历法的1582年10月5日)才被发明,很久以后一些国家也没有接受它。比如,英国是在1752年开始使用Gregorian历法,苏联是在1918年,希腊是在1923年,大部分的欧洲国家使用Julian历法。

参数

month

月份的范围是 1(January)到 12(December)。

day

日期的范围是 1到 31。

year

年份的范围是 -4714 到 9999。

返回值

给定gregorian历法日期的julian天数。

范例

Example #1 Calendar functions

<?php
$jd 
GregorianToJD ( 10 11 1970 );
echo 
" $jd \n" ;
$gregorian  JDToGregorian ( $jd );
echo 
" $gregorian \n" ;
?>

参见

  • jdtogregorian() - 转变一个Julian Day计数为Gregorian历法日期
  • cal_to_jd() - 从一个支持的历法转变为Julian Day计数。

用户评论:

[#1] brian at slaapkop dot net [2010-05-10 07:53:03]

Some people might find it useful to use a function that takes in dates formatted by ISO8601 standards (yyyy-mm-dd):

<?php function daysBetweenDate($from$till) {

    
if($till $from) {
        
trigger_error("The date till is before the date from"E_USER_NOTICE);
        }
        
    
//Explode date since gregoriantojd() requires mm, dd, yyyy input;
        
$from explode('-'$from);
        
$till explode('-'$till);

    
//Calculate date to Julian Day Count with freshly created array $from.
        
$from gregoriantojd($from[1], $from[2], $from[0])."<br />";
        
    
//Calculate date to Julian Day Count with freshly created array $till.
        
$till gregoriantojd($till[1], $till[2], $till[0])."<br />";

    
//Substract the days $till (largest number) from $from (smallest number) to get the amount of days
        
$days = ($till $from);
    
    
//Return the number of days.
        
return $days;

    
//Isn't it sad how my comments use more lines than the actual code? 
}
?>

[#2] jfg [2009-04-07 13:19:25]

If you need the same output as the g_date_get_julian function of the GlibC, here is my php implementation :

<?php
    

    
private function _get_julian$str )
    {
        
$d date_create($str);

        if( 
$d == false )
            return 
0;
        
        
$day_in_year = (int) date_format($d"z");
        
$year        = (int) date_format($d"Y") - 1;
        
$julian_days $year 365;
        
$julian_days += ($year >>= 2);
        
$julian_days -= ($year /= 25);
        
$julian_days += $year >> 2;
        
$julian_days += $day_in_year 1;

        return 
ceil($julian_days);
    }

?>

[#3] ryker at ridgex dot net [2006-06-06 08:27:30]

<?php

function ComputeDateDifference($m0,$d0,$y0,$m1,$d1,$y1)
{
  
$x0 gregoriantojd($m0,$d0,$y0);
  
$x1 gregoriantojd($m1,$d1,$y1);  
  
  
$diff $x1 $x0;
  
  if (
$diff 0)
    
$diff *= -1// abs
    
  
return $diff;    
}
?>

[#4] jettyrat at jettyfishing dot com [2005-03-17 13:34:54]

You can obtain the decimal fraction of the Julian date with the php gregoriantojd() function or the function shown below by applying this code to the returned value.

<?php
  $julianDate 
gregoriantojd($month$day$year);

  
//correct for half-day offset
  
$dayfrac date('G') / 24 .5;
  if (
$dayfrac 0$dayfrac += 1;

  
//now set the fraction of a day
  
$frac $dayfrac + (date('i') + date('s') / 60) / 60 24;

  
$julianDate $julianDate $frac;
?>

[#5] httpwebwitch [2004-06-08 16:04:03]

This function also ignores decimal fractions in JD dates, and it uses non-standard format for returning the Gregorian date. 

So, if your JD date is 2453056.28673, the Gregorian returned value is 2/20/2004, not "2004-02-20 23:45:36"

The decimal part is important, since the Julian day begins at noon, for example 2453056.49 is on Friday, 2453056.50 is on Saturday. Discarding the decimal part means that your returned Gregorian Date will be wrong 50% of the time.

上一篇: 下一篇: