PHP Conference Japan 2024

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 提到的限制外,也没有考虑“天文”计算系统 - 即使用公元零年,而不是像基督教公元系统那样直接从公元前 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
8 年前
可接受的最小儒略日计数为1,这将产生输出“11/25/-4714”(至少在我的操作系统和位置是这样),这意味着公元前4714年11月25日。PHP不识别公元0年。天文学家使用公元0年,并将儒略日数为1的格里高利日期写为公元前4713年11月25日。
uni_fl4r3 at t hotmail dot com
21 年前
我已对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