jdtogregorian

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

jdtogregorian将儒略日转换为公历日期

描述

jdtogregorian(int $julian_day): string

将儒略日转换为包含公历日期的字符串,格式为 "月/日/年"。

参数

julian_day

儒略日数,以整数形式

返回值

公历日期,以 "月/日/年" 格式的字符串形式

参见

添加注释

用户贡献的注释 5 个注释

httpwebwitch
20 年前
儒略日可能包含小数部分,对应于一天中的时间。儒略日从中午开始,小数部分测量从中午到下一天中午开始的几分之几。

例如,儒略日 2453179.00000 是 2004 年 6 月 22 日下午 12:00(中午)。

一小时后,它变成 2453179.04167
在 2453179.20833 我会吃晚饭,
在 2453179.45833,是看晚间新闻的时候。
在睡了一个好觉后,我的闹钟会在 2453179.83333 响起,
然后在 6 月 23 日中午,一个新的儒略日从 2453180 开始。

要将这些函数与小数日一起使用,请使用 floor() 去除小数部分,并将函数应用于整数部分。

然后添加 12 小时,将您带到当天中午。这是 JDToGregorian() 返回的实际时间。

然后通过将儒略日的小数部分乘以 (24*60*60) 秒来添加一天的小数部分。这可能会将您向前或向后带到不同的公历日期。
treebe
21 年前
从儒略日转换为公历日期。
如果您没有加载日历扩展,这个小函数非常有效。

<?php
function jd_to_greg($julian) {
$julian = $julian - 1721119;
$calc1 = 4 * $julian - 1;
$year = floor($calc1 / 146097);
$julian = floor($calc1 - 146097 * $year);
$day = floor($julian / 4);
$calc2 = 4 * $day + 3;
$julian = floor($calc2 / 1461);
$day = $calc2 - 1461 * $julian;
$day = floor(($day + 4) / 4);
$calc3 = 5 * $day - 3;
$month = floor($calc3 / 153);
$day = $calc3 - 153 * $month;
$day = floor(($day + 5) / 5);
$year = 100 * $year + $julian;

if (
$month < 10) {
$month = $month + 3;
}
else {
$month = $month - 9;
$year = $year + 1;
}
return
"$day.$month.$year";
}
?>
swiles at ddbc dot edu dot tw
15 年前
php gregoriantojd() 和 jdtogregorian() 函数除了 httpwebwitch 提到的限制外,没有考虑“天文”系统 - 即使用公元 0 年,而不是像基督教纪年系统那样直接从公元前 1 年到公元 1 年。

这些函数可以用来包装 php 内建函数,以返回符合 ISO 8601 标准的日期

<?php
function ISO8601toJD($ceDate) {
list(
$day, $month, $year) = array_map('strrev',explode('-', strrev($ceDate), 3));
if (
$year <= 0) $year--;
return
gregoriantojd($month, $day, $year);
}

function
JDtoISO8601($JD) {
if (
$JD <= 1721425) $JD += 365;
list(
$month, $day, $year) = explode('/', jdtogregorian($JD));
return
sprintf('%+05d-%02d-%02d', $year, $month, $day);
}
?>
ashton at ieee dot org
7 年前
可以接受的最小儒略日数为 1,它产生的输出为 "11/25/-4714"(至少在我的操作系统和位置是这样),这意味着公元前 4714 年 11 月 25 日。PHP 不识别公元 0 年。天文学家使用公元 0 年,并且会将对应于儒略日数 1 的公历日期写为公元前 4713 年 11 月 25 日。
uni_fl4r3 at t hotmail dot com
20 年前
我对 treebe 的 jd 到 greg 函数进行了一些修改,这个函数将把 Unix 时间戳转换为公历日期/月/年格式...

<?php
function unix_to_greg($unix_timestamp) {
$julian = floor(((($unix_timestamp / "60") / "60") / "24") + "2440588");
$julian = $julian - 1721119;
$calc1 = 4 * $julian - 1;
$year = floor($calc1 / 146097);
$julian = floor($calc1 - 146097 * $year);
$day = floor($julian / 4);
$calc2 = 4 * $day + 3;
$julian = floor($calc2 / 1461);
$day = $calc2 - 1461 * $julian;
$day = floor(($day + 4) / 4);
$calc3 = 5 * $day - 3;
$month = floor($calc3 / 153);
$day = $calc3 - 153 * $month;
$day = floor(($day + 5) / 5);
$year = 100 * $year + $julian;

if (
$month < 10)
{
$month = $month + 3;
}else{
$month = $month - 9;
$year = $year + 1;
}
return
"$day.$month.$year";
}
?>
To Top