PHP中的日期相關(guān)函數(shù)(三)之前我們已經(jīng)介紹過了 PHP 的一些相關(guān)的日期操作對象,今天我們就來學習剩下的那些面向過程的使用方式。當然,如果是和 DateTime 類中相似的方法我們就不再進行介紹了。另外,Date() 和 time() 這兩個非常常用的函數(shù)也不會進行介紹,因為大家都已經(jīng)用濫了,所以我們也就不浪費寶貴的學習資源了。 檢查日期首先,我們先學習一個函數(shù),用來日期是否正確。 var_dump(checkdate(2, 29, 2020)); // bool(true)2020年是閏年,所以有 2月29號 ,而 2021 年沒有 2月29號 ,這個 checkdate() 函數(shù)就是用來檢測給定的日期是否正確。它的參數(shù)順序是 月 、 日 、 年,都是必須的參數(shù)。 獲取及設(shè)置時區(qū)關(guān)于時區(qū)內(nèi)容的學習,我們在 DateTimeZone 類的學習中已經(jīng)詳細的講解過了,在面向過程的方式中,我們也可以通過兩個簡單的函數(shù)來獲取和設(shè)置當前系統(tǒng)運行環(huán)境的時區(qū)信息。 var_dump(date_default_timezone_get()); // string(13) "Asia/Shanghai"使用 date_default_timezone_get() 就可以獲取當前系統(tǒng)環(huán)境中的時區(qū)信息,它是有優(yōu)先順序的,最優(yōu)先的是使用 date_default_timezone_set() 設(shè)置的時區(qū),然后是 php.ini 文件中所設(shè)置的時區(qū)信息,最后如果都沒有設(shè)置的話,就會根據(jù)操作系統(tǒng)的時區(qū)設(shè)置來確定最終我們運行環(huán)境中的時區(qū)到底是哪里。 格式化轉(zhuǎn)換日期這里的轉(zhuǎn)換日期,其實就是將日期內(nèi)容輸出為一個詳細的數(shù)組。 print_r(date_parse("2020-12-12 10:00:00.5"));date_parse() 與 date_parse_from_format() 都是轉(zhuǎn)換日期內(nèi)容為詳細數(shù)組的函數(shù),它們的區(qū)別是 date_parse_from_format() 函數(shù)可以指定日期和格式,這樣傳遞進來的日期內(nèi)容就可以是各種格式類型的。它們生成的數(shù)組里面的內(nèi)容字段名非常清晰,包括年、月、時、分、錯誤信息等內(nèi)容。 計算太陽起落時間這個函數(shù)就比較有意思了,它可以根據(jù)我們指定的一個日期來返回太陽升起和落下的時間。 $sun_info = date_sun_info(strtotime("2020-12-12"), 113.037211, 28.203167);sunrise 就是日出,sunset 就是日落,另外還有 twilight 也就是暮光、黃昏之類的時間,先不管它的準確度如何,這個函數(shù)以及與 sun 相關(guān)的這些函數(shù)都是比較有意思的函數(shù)。 獲得日期、時間詳細信息上面提到過 date_parse() 函數(shù)是將標準日期格式轉(zhuǎn)換為一個詳細的日期信息數(shù)組,在這里,還有其它的函數(shù)也是實現(xiàn)類似的功能,并且內(nèi)容更加的豐富。 var_dump(getdate());getdate() 函數(shù)只會返回日期時間的詳細內(nèi)容,沒有錯誤信息之類的內(nèi)容,不僅包括年、月、時、分等相關(guān)信息,還包含了當前時間的時間戳信息,可以說是真正的完整的日期詳情函數(shù)。它可以有一個參數(shù),用來返回指定日期的內(nèi)容,如果不給這個參數(shù),則返回的是當前日期時間下的信息。gettimeofday() 從名稱就可以看出,它返回的是當前日期的時間戳信息,如果將它的參數(shù)設(shè)置為 true ,那么它和 time() 返回的內(nèi)容基本是類似的,不過需要注意的是,它返回的內(nèi)容是包含微秒的哦。后面我們將要看到的 microtime() 是專門用來返回帶微秒的時間戳的函數(shù),它也一樣可以設(shè)置參數(shù)為 true 來返回這種數(shù)字格式的時間戳,不過大部分人可能都不知道呢。 獲取本地時間詳細信息$localtime = localtime();localtime() 函數(shù)返回的是本地時間的數(shù)組信息,它與 C 函數(shù)調(diào)用返回的完全一樣,如果將第二個參數(shù)設(shè)置為 true 的話,返回的數(shù)組鍵就是英文的鍵名形式的內(nèi)容??梢钥闯鏊彩欠祷氐臅r間信息,同樣地包含年、月、日、時、分、秒這些內(nèi)容。另外還包括 wday 周中的第幾天,yday 年中的第幾天這些信息。 其它時間函數(shù)var_dump(microtime()); // string(21) "0.38488800 1602205473"這就是前面講過的 microtime() 函數(shù),在沒有參數(shù)的情況下,它返回的內(nèi)容是 微秒 空格 秒 這種格式的時間戳,加了參數(shù)以后就是返回的 秒 . 微秒 這樣的格式??梢悦黠@地看出,默認情況下它的微秒精度更高一些,當然,具體的需求還是要根據(jù)我們的業(yè)務情況來定奪到底使用哪種格式,其實如果說要拼接自己的時間戳格式的話,上面說過的 gettimeofday() 可能更方便一些,畢竟它返回的數(shù)組中已經(jīng)為我們準備好了 sec 和 usec 這兩個字段。這絕對是今天這篇文章最大的驚喜哦,完全可以應用到我們需要微秒單位的一些真實業(yè)務場景中。 gmdate() 獲取的就是格里時間,也就是我們當前時區(qū)減少8小時的時區(qū)。idate() 函數(shù)用于獲取指定的時間信息,比如我們在測試代碼中只獲取當前的年份。 mktime() 獲取的是指定時間的時間戳,同理,gmmktime() 獲取的就是指定時間的格里時間戳。 strftime() 和 gmstrftime() 獲取的是格式化的本地時間日期,帶 gm 開頭的也是格里時間,后面跟的是需要的格式,這個和 DateTime 的 format() 方法是類似的,里面的參數(shù)也是類似的。%C 表示的是世紀,和我們真實對應的世紀需要加1,比如代碼中返回的是 20 ,實際上我們現(xiàn)在是 21 世紀。%R 返回的是 H:i 這個格式,%U 返回的是第幾周。 strptime() 是根據(jù)指定格式的日期返回日期的詳細信息數(shù)組,和 localtime() 有點類似。 總結(jié)是不是感覺又發(fā)現(xiàn)了很多寶藏,今天的學習中我們發(fā)現(xiàn)了 gettimeofday() 這個函數(shù)也可以返回微秒時間,而且還是數(shù)組格式化的,也發(fā)現(xiàn)了好玩的可以計算指定日期日出和日落時間的函數(shù)。當然,學習只是一方面,首先你要記得在 PHP 中已經(jīng)提供了這些函數(shù),然后再在實際的業(yè)務場景中進行應用,這樣才能說是真正地熟練地掌握了這些內(nèi)容,別的不多說了,趕緊用起來吧。 測試代碼: https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/1.PHP中的日期相關(guān)函數(shù)(三).php 參考文檔: https://www./manual/zh/ref.datetime.php |
|
|
來自: 硬核項目經(jīng)理 > 《待分類》