1. 程式人生 > >UNIX時間戳和日期間的轉換與計算例項

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
?>