PHP語言中的時區(qū)設(shè)置有兩種方法和通過函數(shù)設(shè)置
2021-08-10
一年12個月,一個月31天(或30天,二月28天,閏年29天),一周7天……這些都是基本常識。但是計算機(jī)本身并不能分辨數(shù)據(jù)的對與錯,它只能依靠開發(fā)者提供的功能來執(zhí)行或檢查。通過PHP中的()函數(shù)檢查日期和時間的有效性。語法如下: bool (int, int day, int year) 參數(shù)的有效值為1到12; day參數(shù)的有效值為當(dāng)月最大天數(shù),例如:一月為31天,二月為29天(閏年);參數(shù) Year 的有效值為 1 到。如果驗證日期有效,則返回 TRUE,否則返回。 【例12-7】驗證2010年2月是28天還是29天,具體代碼如下。運行結(jié)果是:2010年2月是28天12.3.3 檢查日期時間倒計時的有效性是大家生活中經(jīng)常用到的功能,比如:高考倒計時,春節(jié)倒計時,等等。 。下面使用PHP的日期時間函數(shù)設(shè)計2013年元旦倒計時程序。運行效果如圖12-6所示。圖12-6 倒計時的原理很簡單,就是用固定時間減去當(dāng)前時間,結(jié)果就是剩余時間。完成時間的加減,類似于比較大小,必須將時間轉(zhuǎn)換為時間戳,然后才能計算,最后將時間戳轉(zhuǎn)換為日期輸出。
代碼如下: 12.4 綜合例子-倒計時(1)PHP默認(rèn)使用標(biāo)準(zhǔn)格林威治標(biāo)準(zhǔn)時間(即使用零時區(qū))。(2)更改PHP語言設(shè)置時區(qū)有兩種方式:在PHP.INI文件中設(shè)置和通過函數(shù)設(shè)置。(3)對日期時間的處理可分為:格式化日期時間、獲取日期時間信息、獲取本地化date 和 Time 并檢查日期和時間的有效性(4)PHP 中,通過 date() 函數(shù)格式化本地日期和時間。(5)PHP 中,() 函數(shù)用于獲取相關(guān)性日期和時間的指定部分)信息。(6)在PHP中,通過()函數(shù)檢查日期和時間的有效性。知識點提煉12-1打印出前一天的時間格式用PHP is 2006-5-10 22:21:21. 12-2 為什么date函數(shù)格式化的時間與實際時間相差8小時? 12-3 PHP使用da te() 函數(shù)將時間輸入到數(shù)據(jù)庫中。 12-4 php中如何查看時間函數(shù)? 12-5 php中如何更改時間 正常時間(2012-05-16)這種格式的格式化練習(xí)* * Logo Logo Logo Logo Logo Logo Logo Logo Logo 本章要求:第12章日期和時間時間PHP的概念在PHP配置文件 PHP.INI 設(shè)置服務(wù)器時區(qū) 通過()函數(shù)設(shè)置網(wǎng)站當(dāng)前時區(qū) 獲取任意日期時間的UNIX時間戳 獲取當(dāng)前時間戳 轉(zhuǎn)換將日期和時間轉(zhuǎn)換為時間戳 日期和時間格式化輸出 獲取當(dāng)前日期和時間 驗證日期和時間 有效性 主要內(nèi)容 1. PHP 的時間概念 2. UNIX 時間戳 3. 日期和時間處理 4.綜合例子-倒計時第12章日期和時間12.1 PHP的時間概念12.1.1 在PHP.INI文件中設(shè)置時區(qū)12.1.2 通過函數(shù)在php.ini文件中設(shè)置時區(qū),需要定位到[date]下的“;date.=”選項,去掉前面的分號和將其值設(shè)置為本地時區(qū)使用的時間。
例如本地時區(qū)為東巴區(qū),則可以將“date.=”的值設(shè)置為:PRC(中華人民共和國)、Asia/(香港)、Asia/(上海)或Asia /(烏魯木齊)等等,這是東八區(qū)的時代。如圖12-1所示。圖12-1 設(shè)置PHP的時區(qū)設(shè)置完成后,保存文件并重啟服務(wù)器。 12.1.1 在PHP.INI文件中設(shè)置時區(qū) 在應(yīng)用中,在日期時間函數(shù)前使用()函數(shù)也可以完成時區(qū)設(shè)置。 () 函數(shù)的語法如下: ();參數(shù)是PHP可以識別的時區(qū)名稱。如果 PHP 無法識別時區(qū)名稱,則系統(tǒng)使用 UTC 時區(qū)。例如:可以用來設(shè)置北京時間的時區(qū)包括:PRC、Asia/(重慶)、Asia/(上海)或Asia/(烏魯木齊),這些時區(qū)名稱是等價的。注意:如果服務(wù)器使用零時區(qū),則不能直接修改php.ini文件,只能通過()函數(shù)設(shè)置時區(qū)。
12.1.2 通過函數(shù)設(shè)置時區(qū) 12.2 UNIX 時間戳 12.2.1 獲取任意日期和時間的時間戳 12.2.2 獲取 time 12.2.3 日期和時間轉(zhuǎn)換為UNIX時間戳()函數(shù)將時間轉(zhuǎn)換為Unix時間戳。語法如下: int (int hour, int, int, int, int day, int year, int [] )() 函數(shù)根據(jù)給定的參數(shù)返回Unix時間戳。參數(shù)可以從右到左省略,任何省略的參數(shù)都會被設(shè)置為本地日期和時間的當(dāng)前值(即不設(shè)置參數(shù),()函數(shù)獲取本地當(dāng)前日期和時間)。 () 函數(shù)參數(shù)說明如表12-2所示。表12-2 () 函數(shù)參數(shù)說明: 有效時間戳范圍為格林威治標(biāo)準(zhǔn)時間1901年12月13日20:45:54至2038年1月19日03:14:07。(該范圍對應(yīng)最小值和最大值32 位有符號整數(shù))。在系統(tǒng)中,該范圍限定為1970年1月1日至2038年1月19日。
12.2.1 獲取任意日期和時間的時間戳。參數(shù)說明小時 (一分鐘內(nèi)) Day Days Year ,可以是兩位或四位數(shù)字,0-69對應(yīng)2000-2069,70-100對應(yīng)1970-2000。該參數(shù)在夏令時可以設(shè)置為1,否則設(shè)置為0;如果不確定是否為夏令時,則設(shè)置為-1(默認(rèn)值) [例12-1] 應(yīng)用()函數(shù)獲取當(dāng)前時間的時間戳,代碼如下。運行結(jié)果是:上面解釋的()函數(shù)可以在不設(shè)置任何參數(shù)的情況下獲取當(dāng)前時間戳,但是PHP還提供了一個特殊的函數(shù)來獲取當(dāng)前時間戳php高考倒計時代碼,即time()函數(shù)。 time() 函數(shù)獲取當(dāng)前 UNIX 時間戳,返回值是從 UNIX 紀(jì)元(1970 年 1 月 1 日,格林威治標(biāo)準(zhǔn)時間 00:00:00) 到當(dāng)前時間的秒數(shù)。語法為如下: int time (void ) time() 函數(shù)沒有參數(shù),返回值為 UNIX 時間戳的整數(shù)值 [例 12-2] 使用 time() 函數(shù)獲取當(dāng)前時間的時間戳,代碼如下,運行結(jié)果為: 12.2. 2 Get () 函數(shù)將任意英文文本的日期時間描述解析為UNIX時間戳。
語法如下: int (time [, int now] )() 函數(shù)接受一個包含英文日期格式的字符串,并嘗試將其解析為 Unix 時間戳(自 1 1970 00:00:00 GMT 以來的秒數(shù)),它的值是相對于由 now 參數(shù)給出的時間。如果未提供此參數(shù),則使用當(dāng)前系統(tǒng)時間。如果參數(shù) time 的格式是絕對時間,則 now 參數(shù)無效;如果參數(shù)time的格式是相對時間,那么對應(yīng)的時間由參數(shù)now提供。如果解析成功,則返回時間戳,否則返回。在 PHP 5.1.0 之前,此函數(shù)在失敗時返回 -1。 【例12-3】使用()函數(shù)將當(dāng)前時間和指定日期轉(zhuǎn)換為時間戳,代碼如下。 ? 12.2.3 日期和時間轉(zhuǎn)換為 UNIX 時間戳。運行結(jié)果如圖 12-2 所示。圖 12-2 將當(dāng)前時間和指定日期轉(zhuǎn)換為時間戳 注意:如果給定年份是兩位數(shù)格式,則其值 0-69 表示 2000-2069,70-100 表示 1970-2000。有效時間戳通常是從 1901 年 12 月 13 日星期五 20:45:54 GMT 到 2038 年 1 月 19 日星期二 03:14:07 GMT(對應(yīng)于 32 位有符號整數(shù)的最小值和最大值)。
并非所有平臺都支持負(fù)時間戳,因此日志范圍限制在不早于 Unix 紀(jì)元。這意味著 1970 年 1 月 1 日之前的日期將不會在某些版本和其他幾個操作系統(tǒng)中使用。但是,PHP 5.1.0 和更新版本克服了這個限制。 12.3 日期和時間處理 12.3.1 格式化日期和時間 12.3.2 獲取日期和時間信息 12.3.3 檢查日期和時間的有效性date() 函數(shù)格式化本地日期和時間。語法如下: date( ,[int]) 參數(shù)指定日期和時間輸出的格式。參數(shù)規(guī)范格式如表12-4所示。該參數(shù)是可選的。指定時間戳。如果未指定時間戳,則將使用本地時間戳 time()。表 12-4 date()函數(shù)中參數(shù)格式選項 12.3.1 格式日期時間參數(shù)說明 a 小寫上午和下午值,返回值 am 或 pm A 大寫上午和下午值,返回值 AM或 PM B 標(biāo)準(zhǔn)時間,返回值 000~999 d 星期幾,前兩位零,返回值 01~31 D 星期幾,文本格式,3 個字母,返回值 Mon ~ Sun F 月,完整文本,返回值~h 小時,12 小時格式,無前導(dǎo)零,返回值 1~12 H 小時,24 小時格式,無前導(dǎo)零,返回值 0~23 i 帶前導(dǎo)零的分鐘數(shù),返回值為 00~59 I 判斷是否為夏令時,若為夏令時返回值為 1,否則為 0 j 月份中不帶前導(dǎo)零的日期,返回值為 1~31 l(L 的小寫) ) 周數(shù),完整的文本格式,返回值~ L 判斷是否為閏年,如果是閏年則返回值為1,否則為0 m 數(shù)字表示的月份,有前導(dǎo)零,返回值為 01~12 M 3 個字母縮寫 返回值表示的月份 Jan~Dec n 無前導(dǎo)零的數(shù)字表示的月份,返回值1~12 O 與格林威治標(biāo)準(zhǔn)時間不同的小時數(shù),如 +0200 r RFC 822 格式日期,如 Thu, 21 Dec 2000 16:01:07 +0200 s 秒數(shù),前導(dǎo)零,返回值為 00~59 S 月份天數(shù)后的英文后綴,兩個字符,如 st、nd、rd 或 th。
可以與j一起使用。 t 指定月份中的天數(shù),28~31 T 機(jī)器所在的時區(qū) U 自 UNIX 紀(jì)元(1 1970 00:00:00 GMT)以來的秒數(shù) w 一周的第一天,表示以數(shù)字表示,返回值為 0~6 W ISO-8601 格式的星期幾,從每周一開始 y 兩位數(shù)年份,返回值如 88 或 08 Y 4 位完整表示 返回值為 1998、2008 z,一年中的天數(shù),返回值是0到366Z偏移的秒數(shù)。UTC以西時區(qū)的偏移總是負(fù)的,時間的偏移UTC 以東的區(qū)域始終為正。返回值為-~【例12-4】使用date()函數(shù)設(shè)置不同的值,輸出不同格式的時間和代碼如下。運行結(jié)果如圖12-3所示。圖 12-3 日期函數(shù)以不同格式輸出當(dāng)前時間。注意:在運行本章示例時,部分讀者可能得到的時間與系統(tǒng)時間不同。這不是程序的問題。因為 PHP 語言中的默認(rèn)設(shè)置是標(biāo)準(zhǔn)格林威治標(biāo)準(zhǔn)時間,而不是北京時間。如果時間不匹配,請參考本章12.1部分。 【例12-5】使用date()和time()函數(shù)獲取系統(tǒng)當(dāng)前時間和時間戳。具體代碼如下。
其運行效果如圖12-4所示。圖12-4 獲取當(dāng)前時間的時間戳()函數(shù)獲取日期時間指定部分的相關(guān)信息。語法如下: (int) 函數(shù)以數(shù)組的形式返回日期和時間信息。如果沒有時間戳,則以當(dāng)前時間為準(zhǔn)。函數(shù)返回的關(guān)聯(lián)數(shù)組元素說明如表12-5所示。表12-5()函數(shù)返回的關(guān)聯(lián)數(shù)組元素說明()函數(shù)更適合獲取當(dāng)前日期是年、月還是星期幾。雖然也可以獲取當(dāng)前日期,但由于獲取的是返回值數(shù)組,所以更適合獲取時間中的特定值。 12.3.2 獲取日期和時間信息。鍵名解釋了返回值。返回值為秒。 0 到 59 分鐘,返回值是 0 到 59 小時,返回值是 0 到 23 mday,月份中的天,返回值是 1 到 31 wday 星期幾,返回值是 0(代表) to 6 (代表星期六)mon 月份數(shù)字的返回值為1到12年。返回值為4位數(shù)字表示的完整年份,如2010或2011。完整文本表示返回值是Unix紀(jì)元開始后的0秒,與time()的返回值和date()使用的值類似,系統(tǒng)類似,典型值是from-to [例12-6] pass ()函數(shù)獲取當(dāng)前日期php高考倒計時代碼,當(dāng)前日期為年中的日期和月份中的日期,具體代碼如下,運行結(jié)果如圖12-5所示。 圖12-5 函數(shù)獲取當(dāng)前時間信息 Logo Logo Logo Logo Logo Logo Logo Logo Logo Logo * *