PHP中日期和時間相關(guān)函數(shù)簡介
為曲江等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及曲江網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、成都做網(wǎng)站、曲江網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
一、UNIX時間戳
在當前大多數(shù)的UNIX系統(tǒng)中,保存當前日期和時間的方法是:保存格林尼治標準時間從1970年1月1日零點起到當前時刻的秒數(shù),以32為整列表示。1970年1月1日零點也稱為UNIX紀元。在Windows系統(tǒng)下也可以使用UNIX時間戳,簡稱時間戳,但如果時間在1970年以前或2038年以后,處理的時候可能會出現(xiàn)問題。
PHP在處理有些數(shù)據(jù),特別是對數(shù)據(jù)庫中時間類型的數(shù)據(jù)進行格式化時,經(jīng)常需要先將時間類型的數(shù)據(jù)轉(zhuǎn)化為UNIX時間戳再進行處理,另外,不同的數(shù)據(jù)庫系統(tǒng)對時間類型的數(shù)據(jù)不能兼容轉(zhuǎn)換,這時就需要將時間轉(zhuǎn)化為UNIX時間戳,再對時間戳進行操作,這樣就實現(xiàn)了不同數(shù)據(jù)庫系統(tǒng)的跨平臺性。
二、時間轉(zhuǎn)化為時間戳
將用字符串表達的日期和時間轉(zhuǎn)化為時間戳的形式,可以使用strtotime()函數(shù)。
int strtotime(string $time[,int $now])
$time是包含英語日期格式的字符串,$time值如果有毫秒數(shù)將被忽略。其值相對于$now參數(shù)給出的時間,如果沒有給出則默認使用系統(tǒng)當前時間。
如果給定的年份是兩位數(shù)字的形式,則年份值0~69表示2000~2069,70~100表示1970~2000.
另一個取得日期的UNIX時間戳的函數(shù)是mktime()函數(shù),語法如下:
int mktime([int,$hour[,int $minute[,int $second[,$int $month[,int $day[,int $year]]]]]])
如果所有參數(shù)都為空,則默認為當前時間。
三、獲取日期和時間
1.date()函數(shù)
date()函數(shù)的作用是將時間戳按照給定的格式轉(zhuǎn)化為具體的日期和時間字符串。
string date(string $format[,int $timestamp])
說明:$format指定了轉(zhuǎn)化后的日期和時間的格式,$timestamp是需要轉(zhuǎn)化的時間戳,如果省略則使用本地當前時間,即默認值為time()函數(shù)的值。time()函數(shù)返回當前時間的時間戳。
date()函數(shù)指出的格式代碼
字符 | 說明 | 返回值例子 |
d | 月份中的第幾天 | 01~31 |
D | 星期中的第幾天 | Mon到Sun |
j | 月份中的第幾天,沒有前導零 | 1~31 |
I | 星期幾,完整的文本格式 | Sunday~Saturday |
N | ISO-8601格式數(shù)字表示的星期中的第幾天 | 1(星期一)~7(星期天) |
S | 每月天數(shù)后面的英文后綴,用2個字符表示 | st、nd、rd或th,可以和j一起用 |
w | 星期中的第幾天,數(shù)字表示 | 0(星期天)~6(星期六) |
z | 年份中的第幾天 | 0~366 |
W | ISO-8601格式年份中的第幾周,每周從星期一開始 | 例如:42(當年第42周) |
F | 月份,完整的文本格式,如January或March | January~December |
m | 數(shù)字表示的月份,有前導零 | 01~12 |
M | 三個字母縮寫表示的月份 | Jan~Dec |
n | 數(shù)字表示的月份,沒有前導零 | 1~12 |
t | 給定月份所應(yīng)有的天數(shù) | 28~31 |
L | 是否為閏年 | 如果是閏年為1,否則為0 |
o | ISO-8601格式年份數(shù)字。這和Y的值相同,只是如果ISO的星期數(shù)(W)屬于前一年或下一年,則用那一年 | 例如:1999或2003 |
Y | 4為數(shù)字完整表示的年份 | 例如:1999或2003 |
y | 2位數(shù)字表示的年份 | 例如: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 | 有前導零的分鐘數(shù) | 00~59 |
s | 秒數(shù),有前導零 | 00~59 |
e | 時區(qū)標志 | 例如:UTC、GMT |
I | 是否為夏令時 | 如果是夏令時為1,否則為0 |
O | 與格林尼治時間相差的小時數(shù) | 例如:+0200 |
P | 與格林尼治時間(GMT)的差別,小時和分鐘之間用冒號分割 | 例如:+02:00 |
T | 本機所在的時區(qū) | 例如:EST、MDT |
Z | 時區(qū)偏移量的秒數(shù)。UTC西邊的時區(qū)偏移量總是負的,UTC東區(qū)的時區(qū)偏移量總是正的 | -43200~43200 |
c | ISO8601格式的日期 | 2004-02-12T15:19:21+00:00 |
r | RFC822格式的日期 | Thu,21,Dec2000 16:01:07 +0200 |
U | 從UNIX紀元開始至今的秒數(shù) | time()函數(shù) |
2.getdate()函數(shù)
使用getdate()函數(shù)也可以獲取日期和時間信息。
array getdate([int ,$timestamp])
說明:$timestamp是要轉(zhuǎn)化的時間戳,如果不給出則使用當前時間。函數(shù)根據(jù)$timestamp返回一個包含日期和時間信息的數(shù)組。
getdate()函數(shù)返回的數(shù)組中的鍵名和值
鍵名 | 說明 | 舉例 |
seconds | 秒的數(shù)字表示 | 0~59 |
minutes | 分鐘的數(shù)字表示 | 0~59 |
hours | 小時的數(shù)字表示 | 0~23 |
mday | 月份中第幾天的數(shù)字表示 | 1~31 |
wday | 星期中第幾天的數(shù)字表示 | 0(表示星期天)~6(表示星期六) |
mon | 月份的數(shù)字表示 | 1~12 |
year | 4位數(shù)字表示的完整年份 | 例如:1993或2003 |
yday | 一年中第幾天的數(shù)字表示 | 0~365 |
weekday | 星期幾的完整文本表示 | Sunday~Saturday |
month | 月份的完整文本表示 | January~December |
0 | 自UNIX紀元開始至今的秒數(shù) | 系統(tǒng)相關(guān),典型值從-2147483648~2147483647 |
四、其他日期和時間函數(shù)
1.日期和時間的計算
由于時間戳是32位整型數(shù)據(jù),所以通過對時間戳進行加減法運算可計算兩個時間的差值。
2.檢查日期
checkdate()函數(shù)可以用于檢查一個日期數(shù)據(jù)是否有效,語法如下:
bool checkdate(int $month,int $day,int $year)
說明:$year的值是從1到32767,$month的值從1到12,$day的值在給定的$month值所具有的天數(shù)范圍內(nèi),其中閏年的情況也考慮在內(nèi)。當給定的日期是有效的日期時,函數(shù)返回TRUE,否則返回FALSE,
3.設(shè)置時區(qū)
系統(tǒng)默認的是格林尼治標準時間,所以顯示當前時間可能與本地時間會有差別,PHP中提供了可以修改時區(qū)的函數(shù)date_default_timezone_set().
bool date_default_timezone_set(string $timezone_identifier)
參數(shù)$timezone_identifier為要指定的時區(qū),中國大陸可用的值是Asia/Chongqing,Asia/Shanghai,Asia/Urumqi。北京時間可以使用PRC。
另外,還可以通過修改PHP配置文件的方法修改默認時區(qū):打開php.ini,找到date_timezone選項,將選項前面的分號“;”去掉,將選項的值設(shè)為要設(shè)置的默認時區(qū)的時區(qū)標志符。保存后重啟Apache,系統(tǒng)默認的時區(qū)就設(shè)置完了。