小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

PHP中的日期相關(guān)函數(shù)(三)

 硬核項目經(jīng)理 2021-05-31

PHP中的日期相關(guān)函數(shù)(三)

之前我們已經(jīng)介紹過了 PHP 的一些相關(guān)的日期操作對象,今天我們就來學習剩下的那些面向過程的使用方式。當然,如果是和 DateTime 類中相似的方法我們就不再進行介紹了。另外,Date() 和 time() 這兩個非常常用的函數(shù)也不會進行介紹,因為大家都已經(jīng)用濫了,所以我們也就不浪費寶貴的學習資源了。

檢查日期

首先,我們先學習一個函數(shù),用來日期是否正確。

var_dump(checkdate(2292020)); // bool(true)
var_dump(checkdate(2292021)); // bool(false)

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"

var_dump(date("Y-m-d H:i:s")); // string(19) "2020-10-09 08:41:11"

date_default_timezone_set("Asia/Tokyo");

var_dump(date("Y-m-d H:i:s")); // string(19) "2020-10-09 09:41:11"

使用 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"));
// Array
// (
//     [year] => 2020
//     [month] => 12
//     [day] => 12
//     [hour] => 10
//     [minute] => 0
//     [second] => 0
//     [fraction] => 0.5
//     [warning_count] => 0
//     [warnings] => Array
//         (
//         )

//     [error_count] => 0
//     [errors] => Array
//         (
//         )

//     [is_localtime] => 
// )

$date = "6.1.2020 13:00+01:00";
print_r(date_parse_from_format("j.n.Y H:iP", $date));
// Array
// (
//     [year] => 2020
//     [month] => 1
//     [day] => 6
//     [hour] => 13
//     [minute] => 0
//     [second] => 0
//     [fraction] => 0
//     [warning_count] => 0
//     [warnings] => Array
//         (
//         )

//     [error_count] => 0
//     [errors] => Array
//         (
//         )

//     [is_localtime] => 1
//     [zone_type] => 1
//     [zone] => 3600
//     [is_dst] => 
// )

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.03721128.203167);
foreach ($sun_info as $key => $val) {
    echo "$key: " . date("H:i:s", $val) . "\n";
}

// sunrise: 08:03:54
// sunset: 05:58:14
// transit: 19:01:04
// civil_twilight_begin: 09:58:56
// civil_twilight_end: 04:03:11
// nautical_twilight_begin: 11:20:07
// nautical_twilight_end: 02:42:01
// astronomical_twilight_begin: 12:27:37
// astronomical_twilight_end: 01:34:31

sunrise 就是日出,sunset 就是日落,另外還有 twilight 也就是暮光、黃昏之類的時間,先不管它的準確度如何,這個函數(shù)以及與 sun 相關(guān)的這些函數(shù)都是比較有意思的函數(shù)。

獲得日期、時間詳細信息

上面提到過 date_parse() 函數(shù)是將標準日期格式轉(zhuǎn)換為一個詳細的日期信息數(shù)組,在這里,還有其它的函數(shù)也是實現(xiàn)類似的功能,并且內(nèi)容更加的豐富。

var_dump(getdate());
// array(11) {
//     ["seconds"]=>
//     int(15)
//     ["minutes"]=>
//     int(52)
//     ["hours"]=>
//     int(9)
//     ["mday"]=>
//     int(9)
//     ["wday"]=>
//     int(5)
//     ["mon"]=>
//     int(10)
//     ["year"]=>
//     int(2020)
//     ["yday"]=>
//     int(282)
//     ["weekday"]=>
//     string(6) "Friday"
//     ["month"]=>
//     string(7) "October"
//     [0]=>
//     int(1602204735)
//   }

var_dump(gettimeofday());
// array(4) {
//     ["sec"]=>
//     int(1602205147)
//     ["usec"]=>
//     int(625261)
//     ["minuteswest"]=>
//     int(-540)
//     ["dsttime"]=>
//     int(0)
//   }

var_dump(gettimeofday(true)); // float(1602205147.6253)

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_assoc = localtime(time(), true);
print_r($localtime);
// Array
// (
//     [0] => 14
//     [1] => 3
//     [2] => 10
//     [3] => 9
//     [4] => 9
//     [5] => 120
//     [6] => 5
//     [7] => 282
//     [8] => 0
// )
print_r($localtime_assoc);
// Array
// (
//     [tm_sec] => 14
//     [tm_min] => 3
//     [tm_hour] => 10
//     [tm_mday] => 9
//     [tm_mon] => 9
//     [tm_year] => 120
//     [tm_wday] => 5
//     [tm_yday] => 282
//     [tm_isdst] => 0
// )

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"

var_dump(microtime(true)); // float(1602205473.3849)

這就是前面講過的 microtime() 函數(shù),在沒有參數(shù)的情況下,它返回的內(nèi)容是 微秒 空格 秒 這種格式的時間戳,加了參數(shù)以后就是返回的 秒 . 微秒 這樣的格式??梢悦黠@地看出,默認情況下它的微秒精度更高一些,當然,具體的需求還是要根據(jù)我們的業(yè)務情況來定奪到底使用哪種格式,其實如果說要拼接自己的時間戳格式的話,上面說過的 gettimeofday() 可能更方便一些,畢竟它返回的數(shù)組中已經(jīng)為我們準備好了 sec 和 usec 這兩個字段。這絕對是今天這篇文章最大的驚喜哦,完全可以應用到我們需要微秒單位的一些真實業(yè)務場景中。


var_dump(gmdate("Y-m-d H:i:s")); // string(19) "2020-10-09 01:00:20"

var_dump(idate('Y')); // int(2020)

var_dump(mktime(14222210222020)); // int(1603344142)
var_dump(gmmktime(14222210222020)); // int(1603376542)

var_dump(strftime("%C %Y %m %d %R %U")); // string(22) "20 2020 10 09 10:12 40"
var_dump(gmstrftime("%C %Y %m %d %R %U")); // string(22) "20 2020 10 09 01:13 40"

var_dump(strptime("2020-10-09 12:12:12"'%Y-%m-%d %H:%M:%S'));
// array(9) {
//     ["tm_sec"]=>
//     int(12)
//     ["tm_min"]=>
//     int(12)
//     ["tm_hour"]=>
//     int(12)
//     ["tm_mday"]=>
//     int(9)
//     ["tm_mon"]=>
//     int(9)
//     ["tm_year"]=>
//     int(120)
//     ["tm_wday"]=>
//     int(5)
//     ["tm_yday"]=>
//     int(282)
//     ["unparsed"]=>
//     string(0) ""
//   }

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

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多