您好,登錄后才能下訂單哦!
PHP中日期和時間相關函數簡介
一、UNIX時間戳
在當前大多數的UNIX系統中,保存當前日期和時間的方法是:保存格林尼治標準時間從1970年1月1日零點起到當前時刻的秒數,以32為整列表示。1970年1月1日零點也稱為UNIX紀元。在Windows系統下也可以使用UNIX時間戳,簡稱時間戳,但如果時間在1970年以前或2038年以后,處理的時候可能會出現問題。
PHP在處理有些數據,特別是對數據庫中時間類型的數據進行格式化時,經常需要先將時間類型的數據轉化為UNIX時間戳再進行處理,另外,不同的數據庫系統對時間類型的數據不能兼容轉換,這時就需要將時間轉化為UNIX時間戳,再對時間戳進行操作,這樣就實現了不同數據庫系統的跨平臺性。
二、時間轉化為時間戳
將用字符串表達的日期和時間轉化為時間戳的形式,可以使用strtotime()函數。
int strtotime(string $time[,int $now])
$time是包含英語日期格式的字符串,$time值如果有毫秒數將被忽略。其值相對于$now參數給出的時間,如果沒有給出則默認使用系統當前時間。
如果給定的年份是兩位數字的形式,則年份值0~69表示2000~2069,70~100表示1970~2000.
另一個取得日期的UNIX時間戳的函數是mktime()函數,語法如下:
int mktime([int,$hour[,int $minute[,int $second[,$int $month[,int $day[,int $year]]]]]])
如果所有參數都為空,則默認為當前時間。
三、獲取日期和時間
1.date()函數
date()函數的作用是將時間戳按照給定的格式轉化為具體的日期和時間字符串。
string date(string $format[,int $timestamp])
說明:$format指定了轉化后的日期和時間的格式,$timestamp是需要轉化的時間戳,如果省略則使用本地當前時間,即默認值為time()函數的值。time()函數返回當前時間的時間戳。
date()函數指出的格式代碼
字符 | 說明 | 返回值例子 |
d | 月份中的第幾天 | 01~31 |
D | 星期中的第幾天 | Mon到Sun |
j | 月份中的第幾天,沒有前導零 | 1~31 |
I | 星期幾,完整的文本格式 | Sunday~Saturday |
N | ISO-8601格式數字表示的星期中的第幾天 | 1(星期一)~7(星期天) |
S | 每月天數后面的英文后綴,用2個字符表示 | st、nd、rd或th,可以和j一起用 |
w | 星期中的第幾天,數字表示 | 0(星期天)~6(星期六) |
z | 年份中的第幾天 | 0~366 |
W | ISO-8601格式年份中的第幾周,每周從星期一開始 | 例如:42(當年第42周) |
F | 月份,完整的文本格式,如January或March | January~December |
m | 數字表示的月份,有前導零 | 01~12 |
M | 三個字母縮寫表示的月份 | Jan~Dec |
n | 數字表示的月份,沒有前導零 | 1~12 |
t | 給定月份所應有的天數 | 28~31 |
L | 是否為閏年 | 如果是閏年為1,否則為0 |
o | ISO-8601格式年份數字。這和Y的值相同,只是如果ISO的星期數(W)屬于前一年或下一年,則用那一年 | 例如:1999或2003 |
Y | 4為數字完整表示的年份 | 例如:1999或2003 |
y | 2位數字表示的年份 | 例如:99和93 |
a | 小寫的上午和下午值 | am和pm |
A | 大寫的上午和下午值 | AM和PM |
B | Swatch Internet標準時 | 000-999 |
g | 小時,12小時格式,沒有前導零 | 1~12 |
G | 小時,24小時格式,沒有前導零 | 0~24 |
h | 小時,12小時格式,有前導零 | 01~12 |
H | 小時,24小時格式,有前導零 | 00~23 |
i | 有前導零的分鐘數 | 00~59 |
s | 秒數,有前導零 | 00~59 |
e | 時區標志 | 例如:UTC、GMT |
I | 是否為夏令時 | 如果是夏令時為1,否則為0 |
O | 與格林尼治時間相差的小時數 | 例如:+0200 |
P | 與格林尼治時間(GMT)的差別,小時和分鐘之間用冒號分割 | 例如:+02:00 |
T | 本機所在的時區 | 例如:EST、MDT |
Z | 時區偏移量的秒數。UTC西邊的時區偏移量總是負的,UTC東區的時區偏移量總是正的 | -43200~43200 |
c | ISO8601格式的日期 | 2004-02-12T15:19:21+00:00 |
r | RFC822格式的日期 | Thu,21,Dec2000 16:01:07 +0200 |
U | 從UNIX紀元開始至今的秒數 | time()函數 |
2.getdate()函數
使用getdate()函數也可以獲取日期和時間信息。
array getdate([int ,$timestamp])
說明:$timestamp是要轉化的時間戳,如果不給出則使用當前時間。函數根據$timestamp返回一個包含日期和時間信息的數組。
getdate()函數返回的數組中的鍵名和值
鍵名 | 說明 | 舉例 |
seconds | 秒的數字表示 | 0~59 |
minutes | 分鐘的數字表示 | 0~59 |
hours | 小時的數字表示 | 0~23 |
mday | 月份中第幾天的數字表示 | 1~31 |
wday | 星期中第幾天的數字表示 | 0(表示星期天)~6(表示星期六) |
mon | 月份的數字表示 | 1~12 |
year | 4位數字表示的完整年份 | 例如:1993或2003 |
yday | 一年中第幾天的數字表示 | 0~365 |
weekday | 星期幾的完整文本表示 | Sunday~Saturday |
month | 月份的完整文本表示 | January~December |
0 | 自UNIX紀元開始至今的秒數 | 系統相關,典型值從-2147483648~2147483647 |
四、其他日期和時間函數
1.日期和時間的計算
由于時間戳是32位整型數據,所以通過對時間戳進行加減法運算可計算兩個時間的差值。
2.檢查日期
checkdate()函數可以用于檢查一個日期數據是否有效,語法如下:
bool checkdate(int $month,int $day,int $year)
說明:$year的值是從1到32767,$month的值從1到12,$day的值在給定的$month值所具有的天數范圍內,其中閏年的情況也考慮在內。當給定的日期是有效的日期時,函數返回TRUE,否則返回FALSE,
3.設置時區
系統默認的是格林尼治標準時間,所以顯示當前時間可能與本地時間會有差別,PHP中提供了可以修改時區的函數date_default_timezone_set().
bool date_default_timezone_set(string $timezone_identifier)
參數$timezone_identifier為要指定的時區,中國大陸可用的值是Asia/Chongqing,Asia/Shanghai,Asia/Urumqi。北京時間可以使用PRC。
另外,還可以通過修改PHP配置文件的方法修改默認時區:打開php.ini,找到date_timezone選項,將選項前面的分號“;”去掉,將選項的值設為要設置的默認時區的時區標志符。保存后重啟Apache,系統默認的時區就設置完了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。