UNIX時間戳是保存日期和時間的一種緊湊簡潔的方法,是大多數UNIX系統中保存當前日期和時間的一種方法,也是在大多數計算機語言中表示日期和時間的一種標準格式。以32位整數表示格林威治標準時間,例如,使用證書11230499325表示當前時間的時間戳。UNIX時間戳是從1970年1月1日零點(UTC/GMT的午夜)開始起到當前時間所通過的秒數。1970年1月1日零點做爲全部日期計算的基礎,這個日期一般成爲UNIX紀元。php
將日期和時間轉變成UNIX時間戳html
在PHP中,若是須要將日期和時間轉變成UNIX時間戳,能夠調用mktime()函數。該函數的原型以下所示:函數
int mktime([int hour [,int minute[,int second[,int month[,int day[int year]]]]]])學習
該函數中全部參數都是可選的,若是參數爲空,默認將當前時間轉變成UNIX時間戳。這樣,和直接調用time()函數獲取當前的UNIX時間戳功能相同。參數也能夠從右向左省略,任何省略的參數會被設置成本地日期和時間的當前值。若是隻想轉變日期,對具體的時間不在意,能夠將前三個轉變時間的參數都設置爲0.mktime()函數對於日期運算和驗證很是有用,它能夠自動校政越界的輸入。以下所示:spa
1
2
3
4
5
6
|
<?php
echo
date
(
"Y-m-d"
,
mktime
(0,0,0,12,36,2008)).
"\n"
;
//日期超過31天,計算後輸出 2009-01-05
echo
date
(
"Y-m-d"
,
mktime
(0,0,0,14,1,2010)).
"\n"
;
//月份超過12月,計算後輸出2011-02-01
echo
date
(
"Y-m-d"
,
mktime
(0,0,0,1,1,2012)).
"\n"
;
//沒有問題的轉變,輸出結果2012-01-01
echo
date
(
"Y-m-d"
,
mktime
(0,0,0,1,1,99)).
"\n"
;
//會將99年轉變爲1999年, 1990-01-01
?>
|
若是有須要將任何英文文本的日期時間描述直接解析爲UNIX時間戳,可使用strtotime()函數,該函數的圓形以下所示:設計
int strtotime(string time[,int now])unix
函數strtotime()能夠用英語的天然語言建立謳歌時刻的時間戳,接受一個包含美國英語日期格式的字符串並嘗試將其解析爲UNIX時間戳(自January 1 1970 00:00:00 GMT起的描述),其值相對於now參數給出的時間,若是沒有提供次參數則用系統當前時間。該函數執行成功則返回時間戳,不然返回FALSE。和mktime()的對好比下所示:code
1
2
3
4
5
6
|
<?php
echo
date
(
"Y-m-d"
,
strtotime
(
"now"
));
//輸出如今的時間戳
echo
date
(
"Y-m-d"
,
strtotime
(
"8 may 2012"
));
//輸出2012-05-08
echo
date
(
"Y-m-d"
,
strtotime
(
"+1 day"
));
//輸出如今的日期加1天
echo
date
(
"Y-m-d"
,
strtotime
(
"last monday"
));
//輸出2012-04-02
?>
|
下例經過使用strtotime()函數編寫一個記念日的倒計時程序,來介紹一下該函數在項目開發中的實際應用,示例代碼以下所示:htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?php
$now
=
strtotime
(
"now"
);
//當前時間
$endtime
=
strtotime
(
"2014-08-18 08:08:08"
);
//設定畢業時間,轉成時間戳
$second
=
$endtime
-
$now
;
//獲取畢業時間到如今時間的時間戳(秒數)
$year
=
floor
(
$second
/3600/24/365);
//從這個時間戳中換算出年頭數
$temp
=
$second
-
$year
*365*24*3600;
//從這個時間戳中去掉全年的秒數,就剩下月份的秒數
$month
=
floor
(
$temp
/3600/24/30);
//從這個時間戳中共換算出月數
$temp
=
$temp
-
$month
*30*3600*24;
//從時間戳中去掉整月的秒數,就剩下天的描述
$day
=
floor
(
$temp
/24/3600);
//從這個時間戳中換算出剩餘的天數
$temp
=
$temp
-
$day
*3600*24;
//從這個時間戳中去掉成天的秒數,就剩下小時的秒數
$hour
=
floor
(
$temp
/3600);
//從這個時間戳中換算出剩餘的小時數
$temp
=
$temp
-
$hour
*3600;
//從時間戳中去掉小時的秒數,就剩下分的秒數
$minute
=
floor
(
$temp
/60);
//從這個時間戳中換算出剩餘的分數
$second1
=
$temp
-
$minute
*60;
//最後只有剩餘的秒數了
echo
"距離培訓畢業還有($year)年($month)月($day)天($hour)小時($minute)分($second1)秒。"
;
?>
|
注意:若是給定的年份是兩位數字的格式,則其值0-69表示2000-2069,70-100表示1970-2000。教程
日期的計算
在PHP中,計算兩個日期之間相隔的長度,最簡單的方法就是經過計算兩個UNIX時間戳之差來得到。例如,在PHP腳本中接收來自HTML表單用戶提交的出生日期,計算這個用戶的年齡。以下所示:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php
//從表單中接收用戶提交的出生日期中的年份、月份、天
$year
= 1981;
$month
= 11;
$day
= 05;
$birthday
=
mktime
(0,0,0,
$month
,
$day
,
$year
);
//將出生日期轉變爲UNIX時間戳
$nowdate
= time();
//調用time()函數獲取當前時間的UNIX時間戳
$ageunix
=
$nowdate
-
$birthday
;
//兩個時間戳相減獲取用戶年齡的UNIX時間戳
$age
=
floor
(
$ageunix
/3600/24/365);
//將UNIX時間戳除以一年的秒數獲取用戶的年齡
echo
"年齡:$age"
;
?>
|
在以上的腳本中,調用mktime()函數將從用戶出生日期轉變爲UNIX時間戳,再調用time()函數獲取當前時間的UNIX時間戳。由於這個日期的格式都是使用整數表示的,因此能夠將他們相減。又將計算後獲取的UNIX時間戳除以一年的秒數,將UNIX時間戳轉變爲以年度量的單位。