PHP Conference Japan 2024

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(1 月)到 12(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 条注释

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;
?>
httpwebwitch
20 年前
此函数还忽略了 JD 日期中的小数部分,并且它使用非标准格式返回公历日期。

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

小数部分很重要,因为儒略日从中午开始,例如 2453056.49 是星期五,2453056.50 是星期六。丢弃小数部分意味着您返回的公历日期将有 50% 的时间是错误的。
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