unix 時間戳:從1970年1月1日0點開始到當前時間所經過的秒數。
1.將日期轉換為UNIX時間戳
mktime():可以自動校正越界的輸入
原型 : mktime(hour,minute,second,month,day,year);
實例:
<?php echo date("Y-m-d",mktime(0,0,0,2,12,2015)); //2015-12-12 echo date("Y-m-d h:i:s",mktime(7,50,59,10,21,2015)); //2015-10-21 07:50:59 echo date("Y-m-d",mktime(0,0,0,12,33,2015)); //2016-01-02 ,日期超過31天,自動校正時間 ?>
2.將英文文本的日期時間解析為unix時間戳
strtotime()
原型 :strtotime(time,now)
<?php echo strtotime("now"); //1447987573 echo date("Y-m-d",strtotime("now")); //2015-11-20 echo date("Y-m-d h:i:s",strtotime("now")); //2015-11-20 02:49:18 echo date("Y-m-d",strtotime("8 december 2015")); //2015-12-08 ?>
實例:通過strtotime()編寫一個紀念日的倒計時程序
<?php $now = strtotime("now"); //開始時間 $endTime = strtotime('2018-10-12 10:20:59'); //畢業時間,轉成時間戳 $second = $endTime - $now; //獲取從畢業到現在的時間戳(秒數) $year = floor($second/3600/24/365); //從這個時間戳中算出的年數 floor() 函數向下捨入為最接近的整數。 $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; //減去整天的秒數,剩下小時的秒數 $hour = floor($temp/3600); //換算出剩余的小時數 $temp = $temp - $hour*3600; //減去整小時的秒數,剩下分的秒數 $minute = floor($temp/60); //換算出剩余的分數 $second1 = $temp - $minute*60; //剩余的秒數 echo "距離畢業還有{$year}年{$month}月{$day}天{$hour}小時{$minute}分{$second1}秒"; //距離畢業還有2年10月27天1小時56分14秒 ?>
擴展 : 日期的計算
計算兩個日期之間相隔的長度,最簡單的方法就是通過計算兩個UNIX時間戳只差。
實例 : 在php腳本中接收來自html表單提交的出生日期,來計算這個用戶的年齡
<?php $year = 1989; $month = 12; $day = 20; $birthday = mktime(0,0,0,$month,$day,$year); //轉換成時間戳 $nowDay = strtotime("now"); //獲取到當前日期時間戳 $ageUnix = $nowDay - $birthday; $age = floor($ageUnix/(60*60*24*365)); echo "年齡:$age"; // 年齡:25 ?>
日期和時間格式化輸出
當日期和時間需要保存或計算時,使用UNIX時間戳作為標准格式。
缺點 : unix時間戳格式可讀性差
解決辦法:調用date()格式化本地時間和日期
語法 date(format,timestamp) 格式化一個本地時間和日期
<?php date_default_timezone_set('PRC'); //設置中國時區 echo date("Y年-m月-d日 H:i:s"); //2015年-11月-20日 17:30:21 ?>
---------------------------------
說明 :學習筆記
參考資料 :《細說PHP》