PHP Conference Nagoya 2025

gregoriantojd

(PHP 4, PHP 5, PHP 7, PHP 8)

gregoriantojd Konvertierung vom Gregorianischen Kalender zum Julianischen Datum

Beschreibung

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

Diese Funktion konvertiert das in month, day und year übergebene Datum im Gregorianischen Kalender in einen Tag im Julianischen Datum.

Der gültige Zeitraum für den gregorianischen Kalender ist vom 25. November 4714 v. Chr. bis mindestens zum 31. Dezember 9999 n. Chr. Der Gregorianische Kalender wurde allerdings erst am 15. Oktober 1582 (bzw. am 5. Oktober nach dem bis dahin gültigen Julianischen Kalender) von Papst Gregor XIII. eingeführt, in einigen Ländern erst sehr viel später. So übernahmen die Briten den Gregorianischen Kalender 1752, die UDSSR 1918 und Griechenland erst im Jahre 1923. In den meisten europäischen Ländern wurde vor dem Gregorianischen der Julianische Kalender benutzt.

Parameter-Liste

month

Der Monat als Zahl zwischen 1 (für Januar) und 12 (für Dezember)

day

Der Tag als Zahl zwischen 1 und 31. Hat der Monat weniger Tage als angegeben, tritt ein Überlauf auf; siehe das Beispiel weiter unten.

year

Das Jahr als Zahl zwischen -4714 und 9999. Negative Zahlen bedeuten v. Chr., positive Zahlen bedeuten n.Chr. Es ist zu beachten, dass es kein Jahr 0 gibt; auf den 31. Dezember 1 v.Chr. folgt direkt der 1. Januar 1 n. Chr.

Rückgabewerte

Der Julianische Tag für das gegebene Gregorianische Datum als Integer. Für Daten außerhalb des gültigen Bereichs wird 0 zurückgegeben.

Beispiele

Beispiel #1 Caledar Funktionen

<?php
$jd
= gregoriantojd(10, 11, 1970);
echo
"$jd\n";
$gregorian = jdtogregorian($jd);
echo
"$gregorian\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2440871
10/11/1970

Beispiel #2 Überlaufverhalten

<?php
echo gregoriantojd(2, 31, 2018), PHP_EOL,
gregoriantojd(3, 3, 2018), PHP_EOL;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2458181
2458181

Siehe auch

  • jdtogregorian() - Wandelt eine julianische Tageszahl in ein gregorianischen Datum um
  • cal_to_jd() - Konvertiert von einem unterstützten Kalenderformat in Julian-Format

add a note

User Contributed Notes 3 notes

up
2
jettyrat at jettyfishing dot com
19 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
20 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.
up
-5
jfg
15 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);
}

?>
To Top