PHP與MySQL程式設計 學習筆記 第十二章 日期和時間
格式化的日期和時間成為時間戳。UNIX以UTC(協調世界時,1970.1.1 00:00:00來經過的秒數)為時間戳,開始日期常稱為UNIX紀元。
檢查一個日期是否存在:
var_dump(checkdate(29, 2, 2012)); // 返回true,2012年是閏年
var_dump(checkdate(29, 2, 2011)); // 返回false,2011年不是閏年
根據格式化的格式返回表示日期的字串:
可選引數timestamp是UNIX時間戳格式,如果未指定,則使用當前的UNIX時間戳。
補充上表:y表示後兩位數的年份。
print(date("F d, Y")); // 輸出November 23, 2020 print(date("l")); // 輸出Tuesday
獲取與當前時間有關的關聯陣列:
print_r(gettimeofday());
執行它:
陣列鍵含義:
1.dsttime:使用日光節約時間演算法。
2.minuteswest:格林尼治標準時間(GMT)西部的分鐘數。
3.sec:自UNIX紀元後的秒數。
4.usec:整數秒後的微妙數。
php 5.1.0後,可選引數return_float會使gettimeofday以浮點數形式返回當前時間:
print_r(gettimeofday(true)); // 返回1606211361.6912
將UNIX時間戳轉換為使用者友好的值:
print_r(getdate(time()));
執行它:
返回陣列鍵值含義:
獲取當前UNIX時間戳:
返回特定日期的UNIX時間戳,時間非法時PHP 5.1之前返回 -1,之後版本返回false:
返回兩個日期相差多少小時:
$now = time();
$deadline = mktime(23, 50, 10, 11, 24, 2020);
print(($deadline - $now) / 60 / 60); // 2020.11.24 23:50:10距離現在的小時數
改變PHP的本地化環境(即時區、貨幣符號、日期):
引數locale可以有兩種形式,一種是字串,格式為language_COUNTRY.characterset
it_IT.utf8
;另一種格式是一個數組,陣列中包含多個本地化環境,這個特性由php 4.2.0引入,用於彌補不同作業系統間本地化環境編碼的差異。
引數category可指定本地化類別:
1.LC_ALL
:全部類別。
2.LC_COLLATE
:本地化字串比較。如比較不同語言的組成的字串。
3.LC_CTYPE
:本地化字元分類和轉換。如不同語言的大小寫轉換。
4.LC_MONETARY
:本地化貨幣形式。不同國家有不同的貨幣符號和表示方法。
5.LC_NUMERIC
:本地化數值形式。不同國家有不同的表示數值的方式,有的用點做小數點,有的用分號。
6.LC_TIME
:本地化日期和時間形式。不同國家表示時間格式不同。
以下函式根據setlocale函式指定的本地化設定來格式化時間和日期:
引數format中能接受的轉換引數,有些引數Windows不接受:
獲取執行的主指令碼的最後修改的UNIX時間戳,可用於確定頁面最後的修改時間:
$lastmod = date("F d, Y h:i:sa", getlastmod()); // 返回格式化後的指令碼最後修改時間
可用date函式的t引數確定當前月份有多少天:
print(date("t"));
確定任意給定的月份有多少天:
$theDay = mktime(0, 0, 0, 2, 1, 2010);
print(date("t", $theDay)); // 獲取2010年的二月有幾天
計算未來或過去幾天的確切日期:
$futureDate1 = strtotime("+45 days"); // 獲得45天后的UNIX時間戳
$futureDate2 = strtotime("-45 days"); // 獲得45天前的UNIX時間戳
$futureDate3 = strtotime("10 weeks 2 days"); // 獲得十週加兩天後的UNIX時間戳
php 5.1之後,可用DateTime類對各個時區管理日期和時間,以下是其建構函式:
建立一個DateTime類物件:
$date1 = new DateTime(); // 建立一個以當前時間初始化的物件
$date2 = new DateTime("25 May 2010"); // 建立一個以2010.5.25日0點初始化的日期物件
$date3 = new DateTime("25 May 2010 21:55"); // 建立一個以2010.5.25日21:55初始化的日期物件
$date4 = new DateTime("21:55"); // 建立一個以今天的21:55初始化的日期物件
可選引數timezone指示一個DateTimeZone類(php 5.1引入)定義的時區,如果該引數是無效的值或為null,會生成E_NOTICE級的錯誤,如果強制要求php引用系統的時區設定,還會生成一個E_WARNING級的錯誤。
DateTime類物件的格式化輸出時間:
$date = new DateTime();
print($date->format("Y-m-d h:i:sa"));
更改DateTime類物件儲存的日期,成功返回true,失敗返回false:
$date = new DateTime();
$date->setDate(2010, 5, 25); // 將其儲存的時間設為2010.5.25的當前時分秒
print($date->format("Y-m-d h:i:sa"));
更改DateTime類物件儲存的時間,成功返回true,失敗返回false:
$date = new DateTime();
$date->setTime(20, 55); // 將其儲存的時間設為今天的20:55:00
print($date->format("Y-m-d h:i:sa"));
更改DateTime類物件儲存的時間和日期:
$date = new DateTime("May 25, 2010 00:33");
$date->modify("+27 hours"); // 向後調27小時
print($date->format("Y-m-d h:i:s");
通過DateTime類物件計算兩個日期之差:
$date1 = new DateTime("2010-05-30");
$date2 = new DateTime("today");
$span = $date1->diff($date2);
print($span->format("%y %m %d")); // 輸出10 5 27,兩日期相差十年五個月27天