時間戳是我們在時間日期對比時常用到一個小功能,下面我先來給各位介紹strtotime時間戳轉換的一些方法與利用它來做一個日期格式化的幾分鍾、幾小時前、幾天前的一個實例。
1.PHP時間戳函數將日期轉化為unix時間戳
世界末日時間戳 PHP
echo "世界末日時間戳為:".strtotime("2012-12-21")
2.將時間戳轉化為系統時間
date('Y-m-d H:i:s',"1228348800");
(1)獲取當天零點時間戳
$timetoday = strtotime(date("Y-m-d",time()));
(2)獲取明天零點時間戳
$tomorrow = $timetoday + 3600*24;
3.PHP時間戳函數獲取英文文本日期時間 示例如下:
便於比較,使用date將當時間戳與指定時間戳轉換成系統時間
(1)打印明天此時的時間戳strtotime(”+1 day”)
//當前時間
echo date("Y-m-d H:i:s",time());
//明天此時時間
echo date("Y-m-d H:i:s",strtotime("+1 day"));
(2)打印昨天此時的時間戳strtotime(”-1 day”)
//當前時間
echo date("Y-m-d H:i:s",time()) ;
//指定時間
echo date("Y-m-d H:i:s",strtotime("-1 day"));
(3)打印下個星期此時的時間戳strtotime("+1 week")
//當前時間
echo date("Y-m-d H:i:s",time());
//下星期時間
echo date("Y-m-d H:i:s",strtotime("+1 week"));
(4)打印上個星期此時的時間戳strtotime("-1 week")
//當前時間
echo date("Y-m-d H:i:s",time());
//上個星期此時時間
echo date("Y-m-d H:i:s",strtotime("-1 week"));
(5)打印指定下星期幾的時間戳strtotime("next Thursday")
//當前時間
echo date("Y-m-d H:i:s",time());
//下星期幾時間
echo date("Y-m-d H:i:s",strtotime("next Thursday"));
(6)打印指定上星期幾的時間戳strtotime(”last Thursday”)
//當前時間
echo date("Y-m-d H:i:s",time());
//指定時間
echo date("Y-m-d H:i:s",strtotime("last Thursday"));
以上PHP時間戳函數示例可知,strtotime能將任何英文文本的日期時間描述解析為Unix時間戳,我們結合mktime()或date()格式化日期時間獲取指定的時間戳,實現所需要的日期時間
話說看到別人寫的這么一個函數,測試了一下,有些小毛病:對於跨年日期,沒有顯示年份。修改如下
function mdate($time = NULL) {
$text = '';
$time = $time === NULL || $time > time() ? time() : intval($time);
$t = time() - $time; //時間差 (秒)
$y = date('Y', $time)-date('Y', time());//是否跨年
switch($t){
case $t == 0:
$text = '剛剛';
break;
case $t < 60:
$text = $t . '秒前'; // 一分鍾內
break;
case $t < 60 * 60:
$text = floor($t / 60) . '分鍾前'; //一小時內
break;
case $t < 60 * 60 * 24:
$text = floor($t / (60 * 60)) . '小時前'; // 一天內
break;
case $t < 60 * 60 * 24 * 3:
$text = floor($time/(60*60*24)) ==1 ?'昨天 ' . date('H:i', $time) : '前天 ' . date('H:i', $time) ; //昨天和前天
break;
case $t < 60 * 60 * 24 * 30:
$text = date('m月d日 H:i', $time); //一個月內
break;
case $t < 60 * 60 * 24 * 365&&$y==0:
$text = date('m月d日', $time); //一年內
break;
default:
$text = date('Y年m月d日', $time); //一年以前
break;
}
return $text;
}
ThinkPHP中:
將寫好的函數放到 Common 文件夾下。系統會自動加載的。
放到這個common.php頁里,common.php 固有格式,不要改名。
模板中直接調用
{$vo.time|mdate}
例2,簡單一些的
function formatDate($sTime) {
//sTime=源時間,cTime=當前時間,dTime=時間差
$cTime = time();
$dTime = $cTime - $sTime;
$dDay = intval(date("Ymd",$cTime)) - intval(date("Ymd",$sTime));
$dYear = intval(date("Y",$cTime)) - intval(date("Y",$sTime));
if( $dTime < 60 ){
$dTime = $dTime."秒前";
}elseif( $dTime < 3600 ){
$dTime = intval($dTime/60)."分鍾前";
}elseif( $dTime >= 3600 && $dDay == 0 ){
$dTime = "今天".date("H:i",$sTime);
}elseif($dYear==0){
$dTime = date("m-d H:i",$sTime);
}else{
$dTime = date("Y-m-d H:i",$sTime);
}
return $dTime;
}
下面發一個友好時間的方法給大家
/**
* 友好時間顯示
* @param $time
* @return bool|string
*/
function friend_date($time)
{
if (!$time)
return false;
$fdate = '';
$d = time() - intval($time);
$ld = $time - mktime(0, 0, 0, 0, 0, date('Y')); //得出年
$md = $time - mktime(0, 0, 0, date('m'), 0, date('Y')); //得出月
$byd = $time - mktime(0, 0, 0, date('m'), date('d') - 2, date('Y')); //前天
$yd = $time - mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')); //昨天
$dd = $time - mktime(0, 0, 0, date('m'), date('d'), date('Y')); //今天
$td = $time - mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')); //明天
$atd = $time - mktime(0, 0, 0, date('m'), date('d') + 2, date('Y')); //后天
if ($d == 0) {
$fdate = '剛剛';
} else {
switch ($d) {
case $d < $atd:
$fdate = date('Y年m月d日', $time);
break;
case $d < $td:
$fdate = '后天' . date('H:i', $time);
break;
case $d < 0:
$fdate = '明天' . date('H:i', $time);
break;
case $d < 60:
$fdate = $d . '秒前';
break;
case $d < 3600:
$fdate = floor($d / 60) . '分鍾前';
break;
case $d < $dd:
$fdate = floor($d / 3600) . '小時前';
break;
case $d < $yd:
$fdate = '昨天' . date('H:i', $time);
break;
case $d < $byd:
$fdate = '前天' . date('H:i', $time);
break;
case $d < $md:
$fdate = date('m月d日 H:i', $time);
break;
case $d < $ld:
$fdate = date('m月d日', $time);
break;
default:
$fdate = date('Y年m月d日', $time);
break;
}
}
return $fdate;
}
