PHP Conference Nagoya 2025

gregoriantojd

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

gregoriantojd Преобразовывает дату по григорианскому календарю в количество дней в юлианском летоисчислении

Описание

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

Разрешённый диапазон дат для григорианского календаря с 25 ноября 4714 года до н. э. по 31 декабря 9999 год н. э.

Несмотря на возможность обработки дат вплоть до 4714 года до н. э., такое использование имеет мало смысла. Григорианский календарь не существовал до 15 октября 1582 года (или 5 октября 1582 в юлианском календаре). Некоторые страны не переходили на этот календарь очень долгое время. Например, Великобритания совершила переход в 1752 году, СССР в 1918 г., Греция в 1923 г. Большинство стран Европы предпочитали юлианский календарь григорианскому.

Список параметров

month

Месяц в виде числа от 1 (январь) до 12 (декабрь)

day

День в виде числа от 1 до 31. Если в месяце меньше дней, чем передано, то произойдёт переполнение; смотрите пример ниже.

year

Года в виде числа от -4714 до 9999. Отрицательные числа означают года до н. э., положительные - н. э. Обратите внимание, что не существует года 0; 31 декабря 1 года до н. э. следует сразу после 1 января 1 года н. э.

Возвращаемые значения

Возвращает количество дней в юлианском летоисчислении для даты по григорианскому календарю. Даты за пределами допустимого диапазона вернут 0.

Примеры

Пример #1 Календарные функции

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

Результат выполнения приведённого примера:

2440871
10/11/1970

Пример #2 Поведение при переполнении

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

Результат выполнения приведённого примера:

2458181
2458181

Смотрите также

  • jdtogregorian() - Переводит число дней в юлианском летоисчислении в дату по Григорианскому календарю
  • cal_to_jd() - Преобразовывает заданную дату в юлианскую

Добавить

Примечания пользователей 3 notes

up
1
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
1
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
-1
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