gregoriantojd

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

gregoriantojd将公历日期转换为儒略日计数

说明

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

公历的有效范围是从公元前 4714 年 11 月 25 日到至少公元 9999 年 12 月 31 日。

虽然此函数可以处理公元前 4714 年的日期,但这种用法可能没有意义。公历直到 1582 年 10 月 15 日(或儒略历中的 1582 年 10 月 5 日)才被采用。一些国家直到很久以后才接受它。例如,英国在 1752 年转换,苏联在 1918 年转换,希腊在 1923 年转换。大多数欧洲国家在公历之前使用儒略历。

参数

month

月份,用 1(一月)到 12(十二月)的数字表示

day

日期,用 1 到 31 的数字表示。如果月份的天数少于给定的天数,则会发生溢出;请参阅下面的示例。

year

年份,用 -4714 到 9999 之间的数字表示。负数表示公元前,正数表示公元。请注意,没有年份 0;公元前 1 年 12 月 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

参见

添加注释

用户贡献的注释 3 个注释

2
jettyrat at jettyfishing dot com
19 年前
您可以通过将此代码应用于 php gregoriantojd() 函数或下面显示的函数的返回值来获取儒略日期的小数部分。

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

// 针对半日偏移进行校正
$dayfrac = date('G') / 24 - .5;
if (
$dayfrac < 0) $dayfrac += 1;

// 现在设置一天中的小数部分
$frac = $dayfrac + (date('i') + date('s') / 60) / 60 / 24;

$julianDate = $julianDate + $frac;
?>
0
httpwebwitch
20 年前
此函数还忽略了 JD 日期中的小数部分,并且使用非标准格式返回公历日期。

因此,如果您的 JD 日期为 2453056.28673,则返回的公历值为 2004 年 2 月 20 日,而不是“2004-02-20 23:45:36”。

小数部分很重要,因为儒略日从中午开始,例如 2453056.49 在星期五,2453056.50 在星期六。丢弃小数部分意味着您返回的公历日期将有一半时间是错误的。
-5
jfg
15 年前
如果您需要与 GlibC 的 g_date_get_julian 函数相同的输出,这里是我的 php 实现

<?php
/**
* Glib g_date_get_julian PHP 实现
*
* @param $str 日期字符串,采用 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