Calendar是一套關於日期曆法的擴展,在PHP中要如何使用該Calendar擴展?這篇文章為大家介紹Calendar 擴充安裝和使用方法。
Calendar是一套關於日期曆法的擴展,但是對於我們來說,它沒有農曆的相關操作,所以對於我們中國人來說這個擴展並沒有什麼實際的作用。不過這並不妨礙我們去了解學習它。
日期曆法類型
對於正常情況下的日期操作來說,PHP 預設使用的是UTC 時間,也就是國際標準時間,對於我們國家來說,需要在標準UTC 的時間上加8 來表示北京時間東八區。當然,也可以直接修改 php.ini 或資料庫中的時區相關參數來定義好日期時區。
標準時區對應的其實就是格里高利時間曆法 Gregorian 。也就是我們現在最常用的公曆、陽曆日期。 Calendar 擴展中除了這個標準的公曆法之外,還支持 猶太曆法 Jewish 、 法曆 French 以及另一個非常出名的 儒略曆 Julian 。我們的Gregorian 曆法就是從Julian 曆中演化而來的,它們的差距並不大,但猶太曆和法歷的差距就比較大了,一會在下面的程式碼中我們將看到各種曆法之間的差別。
關於這些曆法的具體內容大家可以自行查詢一下相關的資料,也能夠學習到一些有趣的歷史知識,比如為什麼廢棄了 儒略曆 而將公曆定為了 格里曆 。還有 法歷 為什麼只有短短的那些年,猶太曆 為什麼年份記得這麼大了。法歷 和 猶太曆 月份名字的來源等,都是很有趣的故事。
Calendar 擴充安裝及曆法資訊檢視
#Calendar 擴充功能已經整合在 PHP 安裝套件中了,不需要特別的單獨去安裝。如果你無法使用 Calendar 相關的函數,可以重新編譯 PHP 並加上 --enable-calendar 參數即可。
接下來我們看下指定曆法的詳細信息,這裡我們指定的是 猶太曆 。
$info = cal_info(2); print_r($info); // Array // ( // [months] => Array // ( // [1] => Tishri // [2] => Heshvan // [3] => Kislev // [4] => Tevet // [5] => Shevat // [6] => Adar I // [7] => Adar II // [8] => Nisan // [9] => Iyyar // [10] => Sivan // [11] => Tammuz // [12] => Av // [13] => Elul // ) // [abbrevmonths] => Array // ( // [1] => Tishri // [2] => Heshvan // [3] => Kislev // [4] => Tevet // [5] => Shevat // [6] => Adar I // [7] => Adar II // [8] => Nisan // [9] => Iyyar // [10] => Sivan // [11] => Tammuz // [12] => Av // [13] => Elul // ) // [maxdaysinmonth] => 30 // [calname] => Jewish // [calsymbol] => CAL_JEWISH // )
cal_info() 函數接收的參數是一個常數,分別是 CAL_GREGORIAN ,CAL_JULIAN ,CAL_JEWISH ,CAL_FRENCH ,它們對應的數字就是 0,1,2,3 。在這段程式碼中,我們回傳的就是 CAL_JEWISH 的訊息。可以看出,猶太曆 中的月份名稱與公曆中的英文名稱都不一樣,例如這裡有 尼撒月 Nisan 、提市黎月 Tishri 。具體的內容就不深究了,畢竟我們在日常生活中是完全接觸不到這種曆法的。
大家可以自己試試其它曆法返回的資訊內容,公曆和儒略曆是一樣的,法曆中的月份名字就又不一樣了,而且這些名字還都很有意思。
日期曆法轉換
首先,要進行曆法轉換的話,我們要將指定的日期轉換成 Julian Days 計數。這個 jd 計數可以看作是 Calendar 擴展的一個中間變量,用於各種曆法之間的換算。
// 转变Unix时间戳为Julian Day计数 $today = unixtojd(mktime(0, 0, 0, 9, 23, 2020)); echo $today, PHP_EOL; // 2459116
使用 unixtojd() 函數就可以將一個 unix 時間戳記轉換成 jd 計數。接下來,我們來看看 2020 年 9 月 23 號對應的 猶太曆 是哪一天。
// 获取当前犹太历时间 print_r(cal_from_jd($today, CAL_JEWISH)); // Array // ( // [date] => 1/5/5781 // [month] => 1 // [day] => 5 // [year] => 5781 // [dow] => 3 // [abbrevdayname] => Wed // [dayname] => Wednesday // [abbrevmonth] => Tishri // [monthname] => Tishri // )
返回的訊息中已經很明確了吧,我們這一天是 猶太曆 的 5781 年 1 月 5 號 星期三 。目前的月份是 Tishri 提市黎月 ,對應著公曆年的第一個月,猶太曆中教會年的第七個月,代表著秋天的到來。
cal_from_jd() 函數的作用就是根據 jd計數 傳回指定曆法的詳細資料。而另外一個 cal_to_jd() 函數則是從一個支援的曆法資料轉換為 jd計數 。
echo cal_to_jd(CAL_JEWISH, 1, 5, 5781), PHP_EOL; // 2459116 echo cal_to_jd(CAL_GREGORIAN,9, 23, 2020), PHP_EOL; // 2459116
可以看到上面 猶太曆 回傳的 jd計數 和我們公曆回傳的 jd計數 是一致的。
當然,我們也可以將 jd計數 的日期轉換成 unix 時間。
echo date("Y-m-d", jdtounix($today)), PHP_EOL; // 2020-09-23
除了cal_from_jd() 和cal_to_jd() 之外,Calendar 擴展還為我們提供了一些快捷的函數進行日期的轉換,只不過它們是直接返回的字符串類型的日期信息,不是像cal_from_jd() 函數一樣傳回日期的詳細資料。
// 转变一个Gregorian历法日期到Julian Day计数 $jd = GregorianToJD(9, 23, 2020); // 转变一个Julian Day计数为Gregorian历法日期 echo jdtogregorian($jd), PHP_EOL; // 9/23/2020 // 转变一个Julian Day计数为Julian历法日期 echo jdtojulian($jd), PHP_EOL; // 9/10/2020 // 转变一个Julian Day计数为犹太历法日期 echo jdtojewish($jd), PHP_EOL; // 1/5/5781 // 转变一个Julian Day计数为unix时间戳 echo jdtounix($jd), PHP_EOL; // 1600819200 $jd = GregorianToJD(9, 23, 1799); // 转变一个Julian Day计数为French历法日期 echo jdtofrench($jd), PHP_EOL; // 1/1/8
GregorianToJD() 方法就是快速轉換一個公曆日期為 jd計數 。而 jdtoxxxxx 為一些函數就是快速地傳回 jd計數 對應的日期曆法的字串資訊。
大家可以注意下,法曆日期只能是公曆1792年9月22日到1806年9月22日這段日期以內的日期,也就是法蘭西第一共和國成立後推出的法歷,並在1806年結束使用,因為1804年拿破崙成立了法蘭西第一帝國。帝國廢止了 法歷(共和曆)並全面推行 公曆 。
某個月份的天數
上面的歷史知識學習的怎麼樣?接下來還是回歸到 Calendar 擴展中的學習。
$num = cal_days_in_month(CAL_GREGORIAN, 2, 2020); echo $num, PHP_EOL; // 29
cal_days_in_month() 函数是返回指定历法月份的天数,比如我们看看 2020 年的 2月 是不是 闰月 就可以用这个函数来实现。
复活节彩蛋
复活节是西方非常重要的一个节日,所以在 Calendar 扩展中就有函数可以直接获得指定年份的复活节日期。关于复活节的计算方式其实还是比较复杂的,手工推算是比较麻烦的,而程序计算就非常方便了。
// 指定年份的复活节时间戳 echo date("M-d-Y", easter_date(2019)), PHP_EOL; // Apr-21-2019 echo date("M-d-Y", easter_date(2020)), PHP_EOL; // Apr-12-2020 echo date("M-d-Y", easter_date(2021)), PHP_EOL; // Apr-04-2021 // 3月21日到复活节之间的天数 echo easter_days(2019), PHP_EOL; // 31 echo easter_days(2020), PHP_EOL; // 22 echo easter_days(2021), PHP_EOL; // 14
easter_date() 函数就是返回指定年份的复活节日期。而 easter_days() 函数则是返回从当年公历的 3月21日 到复活节之间的天数。
复活节是每年春分月圆后的第一个星期日,而春分一般是在3月21日,这就简化为只要计算满月的日期和紧挨的星期日的日期就可以得到每年复活节的具体日期了。这种函数在西方世界的软件开发中会非常常用,其实就像我们需要获取每年春节的具体公历日期一样。
总结
是不是很有意思的一套扩展函数。不过对于我们主要面向国内开发的开发者来说用处确实不大,但笔者在学习这个扩展的时候另外收获了不少历史方面的知识,也算是开了眼界,也不失为一大收获,大家也自己试着玩玩并且查查相关的历史知识吧,说不定你的收获会更多!
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/10.PHP中非常好玩的Calendar扩展学习.php
参考文档:https://www.php.net/manual/zh/book.calendar.php
推荐学习:《PHP视频教程》
以上是PHP中什麼是Calendar擴充?如何使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

會話ID應在登錄時、敏感操作前和每30分鐘定期重新生成。 1.登錄時重新生成會話ID可防會話固定攻擊。 2.敏感操作前重新生成提高安全性。 3.定期重新生成降低長期利用風險,但需權衡用戶體驗。

在PHP中設置會話cookie參數可以通過session_set_cookie_params()函數實現。 1)使用該函數設置參數,如過期時間、路徑、域名、安全標誌等;2)調用session_start()使參數生效;3)根據需求動態調整參數,如用戶登錄狀態;4)注意設置secure和httponly標誌以提升安全性。

在PHP中使用會話的主要目的是維護用戶在不同頁面之間的狀態。 1)會話通過session_start()函數啟動,創建唯一會話ID並存儲在用戶cookie中。 2)會話數據保存在服務器上,允許在不同請求間傳遞數據,如登錄狀態和購物車內容。

如何在子域名間共享會話?通過設置通用域名的會話cookie實現。 1.在服務器端設置會話cookie的域為.example.com。 2.選擇合適的會話存儲方式,如內存、數據庫或分佈式緩存。 3.通過cookie傳遞會話ID,服務器根據ID檢索和更新會話數據。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)