Mid-Atlantic Developer Conference

gregoriantojd

(PHP 4, PHP 5, PHP 7)

gregoriantojdConverts a Gregorian date to Julian Day Count

Descrierea

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

The valid range for the Gregorian calendar is from November 25, 4714 B.C. to at least December 31, 9999 A.D.

Although this function can handle dates all the way back to 4714 B.C., such use may not be meaningful. The Gregorian calendar was not instituted until October 15, 1582 (or October 5, 1582 in the Julian calendar). Some countries did not accept it until much later. For example, Britain converted in 1752, The USSR in 1918 and Greece in 1923. Most European countries used the Julian calendar prior to the Gregorian.

Parametri

month

The month as a number from 1 (for January) to 12 (for December)

day

The day as a number from 1 to 31. If the month has less days then given, overflow occurs; see the example below.

year

The year as a number between -4714 and 9999. Negative numbers mean years B.C., positive numbers mean years A.D. Note that there is no year 0; December 31, 1 B.C. is immediately followed by January 1, 1 A.D.

Valorile întoarse

The julian day for the given gregorian date as an integer. Dates outside the valid range return 0.

Exemple

Example #1 Calendar functions

<?php
$jd 
gregoriantojd(10111970);
echo 
"$jd\n";
$gregorian jdtogregorian($jd);
echo 
"$gregorian\n";
?>

Exemplul de mai sus va afișa:

2440871
10/11/1970

Example #2 Overflow behavior

<?php
echo gregoriantojd(2312018), PHP_EOL,
     
gregoriantojd(3,  32018), PHP_EOL;
?>

Exemplul de mai sus va afișa:

2458181
2458181

A se vedea și

  • jdtogregorian() - Converts Julian Day Count to Gregorian date
  • cal_to_jd() - Converts from a supported calendar to Julian Day Count

add a note add a note

User Contributed Notes 3 notes

up
0
jfg
9 years ago
If you need the same output as the g_date_get_julian function of the GlibC, here is my php implementation :

<?php
   
/**
     * Glib g_date_get_julian PHP implementation
     *
     * @param  $str  Date string in a format accepted by strtotime
     * @author jfg
     */
   
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);
    }

?>
up
0
jettyrat at jettyfishing dot com
13 years ago
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;
?>
up
0
httpwebwitch
13 years ago
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.
To Top