1. 程式人生 > 資料庫 >PHP與MySQL程式設計 學習筆記 第十二章 日期和時間

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天