UNIX時間戳和日期間的轉換與計算例項
1、UNIX時間戳的簡介
UNIX時間戳是儲存日期和時間的一種緊湊簡潔的方法,是大多數UNIX系統中儲存當前日期和時間的一種方法,是根據一個時區進行標準化而設計的一種通用格式,也是在大多數計算機語言中表示日期和時間的一種標準格式。以32位整數表示格林威治標準時間,所以特別適用於計算機處理,1970年1月1日通常稱為UNIX紀元。
2、 將日期和時間轉變成UNIX時間截
(1)strtotime()和mktime()的對比
mktime 格式:int mktime[int hour[,int minute[,int second[,int month[,int day[,int year]]]]]]
所有引數都是可選的,如果引數沒空,預設將當前時間轉變成UNIX時間戳。這樣,和直接呼叫time()函式獲取當前的UNIX時間戳的功能相同。引數也可以從右向左省略,任何省略的引數會被設定成本日期和時間的當前值。如果只想轉變日期,對具體的時間不在乎,可以將前三個轉變時間的引數都設定為0,mktime()函式對於日期運算和驗證很有用,可以自動校正越界的輸入。
在PHP中,呼叫mktime()函式將日期和時間轉變成UNIX時間戳:
<span style="font-size:14px;"><?php echo date("Y-m-d",mktime(0,0,0,12,36,2016))."<br>"; //日期超過31天,計算後輸出2017-01-05 echo date("Y-m-d",mktime(0,0,0,14,3,2015))."<br>"; //月份超過12月,計算輸出2016-02-03 echo date("Y-m-d",mktime(0,0,0,1,1,2015))."<br>"; //沒有問題的轉變,輸出 2015-01-01 echo date("Y-m-d",mktime(0,0,0,1,1,15))."<br>"; //會將15年轉換為2015年,2015-01-01 ?></span>
*給定的年份是兩位數字的格式,則其值0-69表示2000-2069,70-100表示1970-2000
strtotime() 格式:int strtotime(string time[,int now])
函式strtotime()可以用英語的自然語言建立的時間戳,接受一個包含美國英語日期格式的字串並嘗試將其解析為UNIX時間戳,其值相對於now引數給出的時間,如果沒有提供引數則用系統當前時間
呼叫strtotime()函式
<span style="font-size:14px;"><?php echo date("Y-m-d",strtotime("now"))."<br/>"; //輸出現在的時間戳 echo date("Y-m-d",strtotime("8 may 2014"))."<br/>"; //輸出2014-05-08 echo date("Y-m-d",strtotime("+1 day"))."<br/>"; //輸出現在的日期+1 echo date("Y-m-d",strtotime("last monday"))."<br/>"; //輸出2016-08-22 ?></span>
(2)使用strtotime()函式編寫一個畢業倒計時的程式
<span style="font-size:14px;"><?php
$now = strtotime("now"); //當前時間
$endtime = strtotime("2018-08-18 08:08:08"); //畢業時間,轉成時間戳
$second = $endtime-$now; //獲取畢業時間到現在時間的時間戳(秒數)</span>
<span style="font-size:14px;">$year = floor($second/3600/24/365); //從獲取的時間戳中換算出年頭數
$temp = $second-$year*365*24*3600; //從時間戳中去掉整年的時間戳,剩下月份秒數
$month = floor($temp/3600/24/30); //從時間戳中換算出月數
$temp = $temp-$month*30*24*3600; //從時間戳中去掉整月的的秒數,剩下天的秒數
$day = floor($temp/3600/24); //從時間戳中換算出天數
$temp = $temp-$day*24*3600; <span style="font-family: Arial, Helvetica, sans-serif;"> //從時間戳中去掉整天的秒數,剩下小時的秒數</span>
$hour = floor($temp/3600); <span style="font-family: Arial, Helvetica, sans-serif;"> //從時間戳中換算出小時數</span>
$temp = $temp-$hour*3600; <span style="font-family: Arial, Helvetica, sans-serif;"> //從時間戳中去掉整天的秒數,剩下小時的秒數</span>
$minute = floor($temp/60); //從時間戳中換算出分鐘數
$second = $temp-$minute*60; //剩餘的秒數
echo "距離畢業還有($year)年($month)月($day)天($hour)小時($minute)分($second)秒";
?></span>
(3)日期之間相隔的長度計算——年齡計算
<?php
//從表單中接受使用者提交出生日期中的年月日
$year = 1991;
$month = 12;
$day = 26;
$birthday = mktime(0,0,0,$month,$day,$year); //將出生日期轉變為UNIX時間戳
$now = time(); //獲取當前時間的UNIX時間戳
$ageunix = $now-$birthday; //獲取使用者年齡的UNIX時間戳
$age = floor($ageunix/3600/24/365); //將UNIX時間戳除以一年的秒數獲取使用者的年齡
echo "年齡:"."$age"; //輸出 年齡:24
?>