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》