當前位置: 首頁> 最新文章列表> 如何用cal_from_jd函數將天文時間轉換為標準日期?實用技巧分享

如何用cal_from_jd函數將天文時間轉換為標準日期?實用技巧分享

gitbox 2025-09-16

1. cal_from_jd()函數概述

PHP的cal_from_jd()函數是PHP內建的日曆轉換函數之一,它能夠將儒略日(Julian Day, JD)轉換為指定的日曆格式。這個函數的語法如下:

 <span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">cal_from_jd</span></span><span> ( </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$jd</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$calendar</span></span><span> )
</span></span>

參數說明:

  • $jd :需要轉換的儒略日(Julian Date)。它是一個浮動的數字,代表自公元前4713年1月1日正午以來的天數。

  • $calendar :指定轉換後的日曆類型。 PHP支持多種日曆系統,包括:

    • CAL_GREGORIAN (公曆)

    • CAL_JULIAN (儒略歷)

    • CAL_FAJI (伊斯蘭歷)

    • CAL_HEBREW (希伯來歷)

該函數會返回一個關聯數組,包含轉換後的日期元素,如年份、月份、日期等。


2. 使用cal_from_jd()進行轉換

為了更好地理解如何使用cal_from_jd()函數,我們來看一個具體的例子。假設你有一個儒略日為2459373.5(即2022年7月16日的JD),你想將它轉換為公曆日期。

示例代碼:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$jd</span></span><span> = </span><span><span class="hljs-number">2459373.5</span></span><span>;  </span><span><span class="hljs-comment">// 儒略天</span></span><span>
</span><span><span class="hljs-variable">$calendar</span></span><span> = CAL_GREGORIAN;  </span><span><span class="hljs-comment">// 公曆</span></span><span>
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-title function_ invoke__">cal_from_jd</span></span><span>(</span><span><span class="hljs-variable">$jd</span></span><span>, </span><span><span class="hljs-variable">$calendar</span></span><span>);

</span><span><span class="hljs-comment">// 輸出結果</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"年: "</span></span><span> . </span><span><span class="hljs-variable">$date</span></span><span>[</span><span><span class="hljs-string">'year'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"月: "</span></span><span> . </span><span><span class="hljs-variable">$date</span></span><span>[</span><span><span class="hljs-string">'month'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"天: "</span></span><span> . </span><span><span class="hljs-variable">$date</span></span><span>[</span><span><span class="hljs-string">'day'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

輸出:

 <span><span><span class="hljs-section">年: 2022</span></span><span>
</span><span><span class="hljs-section">月: 7</span></span><span>
</span><span><span class="hljs-section">天: 16</span></span><span>
</span></span>

在這個例子中, cal_from_jd()將儒略日2459373.5轉換成了2022年7月16日的公曆日期。


3. 理解JD與日期之間的轉換

儒略日(JD)是一個浮動數值,其中整數部分錶示自公元前4713年1月1日正午以來的天數,小數部分則代表一天中的時間。比如,JD為2459373.5意味著這一天的正午時分,而JD為2459373.25則表示當天的0時(午夜)。對於不同的日曆系統, cal_from_jd()會根據具體的規則調整日期的計算。

例子1:轉換到儒略歷

如果你想將儒略日轉換為儒略曆日期(Julian Calendar),可以使用以下代碼:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$jd</span></span><span> = </span><span><span class="hljs-number">2459373.5</span></span><span>;
</span><span><span class="hljs-variable">$calendar</span></span><span> = CAL_JULIAN;  </span><span><span class="hljs-comment">// 儒略歷</span></span><span>
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-title function_ invoke__">cal_from_jd</span></span><span>(</span><span><span class="hljs-variable">$jd</span></span><span>, </span><span><span class="hljs-variable">$calendar</span></span><span>);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"年: "</span></span><span> . </span><span><span class="hljs-variable">$date</span></span><span>[</span><span><span class="hljs-string">'year'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"月: "</span></span><span> . </span><span><span class="hljs-variable">$date</span></span><span>[</span><span><span class="hljs-string">'month'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"天: "</span></span><span> . </span><span><span class="hljs-variable">$date</span></span><span>[</span><span><span class="hljs-string">'day'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

輸出:

 <span><span><span class="hljs-section">年: 2022</span></span><span>
</span><span><span class="hljs-section">月: 7</span></span><span>
</span><span><span class="hljs-section">天: 3</span></span><span>
</span></span>

可以看到,儒略歷與公曆的日期不同,這是因為儒略歷和公曆在日期計算上有所差異。


4. 注意事項

  • 精度問題cal_from_jd()函數的精度僅到日期的天數,因此,傳入的JD值通常是一個浮動的數字,且小數部分不會影響日期的輸出(除非你需要精確到小時或分鐘)。如果需要處理更精確的時間,可以結合其他時間處理函數來實現。

  • 日期範圍:不同的日曆系統對於日期的範圍有所不同。例如,希伯來歷和伊斯蘭歷的起始日期和有效範圍與公曆和儒略歷有所不同,因此要根據需求選擇合適的日曆系統。

  • 錯誤處理:確保傳入的JD值有效。如果傳入無效的JD, cal_from_jd()函數會返回false ,因此在使用時需要做好異常處理。