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 年前
除了 httpwebwitch 提到的限制之外,PHP 的 gregoriantojd() 和 jdtogregorian() 函式並未考慮到「天文」計算系統 — 也就是使用公元 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
8 年前
可接受的最小儒略日計數輸入值為 1,會產生輸出「11/25/-4714」(至少在我的作業系統和位置中是如此),表示西元前 4714 年 11 月 25 日。PHP 不識別年份 0。天文學家會使用年份 0,並將儒略日編號 1 對應的格里高利日期寫為西元前 4713 年 11 月 25 日。
uni_fl4r3 at t hotmail dot com
21 年前
我對 treebe 的儒略日至格里高利日期函式做了一點小修改,這個函式會將 Unix 時間戳轉換為格里高利日期/月份/年份格式...

<?php
函數 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;

如果 ($month < 10)
{
$month = $month + 3;
}
否則{
$month = $month - 9;
$year = $year + 1;
}
返回 "$day.$month.$year";
}
?>
To Top