现在很多网站将时间的显示都变得更人性化,例如:某某在3分钟之前执行过XX动作。最近在做相关的东西所以直接在SMARTY中做了这个插件。
插件说明:
1、 3个月以内的时间都将以“XX前”这样的形式显示。
2、3个月以后的时间将以参数“$dateformat”提供的格式显示正常时间“XX年XX月XX日,时:分:秒”
3、$timestamp参数必须为有效的并且小于当前时间的时间戳。
4、$dateformat参数为大于三个月的时间显示格式可以配合“php时间显示格式 ”使用。
插件代码:
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty date_ago modifier plugin
*
* Type: modifier
* Name: date_ago
* Purpose: 通过时间戳获取时间戳离现在多久
* @author StMadMan
* @param timestamp|string
* @param dateformat|string
* @return string|void
*/
function
smarty_modifier_date_ago(
$timestamp
,
$dateformat
=
'Y年m月d日, H:i:s'
)
{
$now
=
time
(
)
;
if
(
$timestamp
&
gt;
$now
)
{
return
FALSE
;
}
$agoTime
=
$now
-
$timestamp
;
if
(
$agoTime
&
lt;
60
)
{
return
$agoTime
.
'秒前'
;
}
elseif
(
$agoTime
&
lt;
3600
&
amp;&
amp;
$agoTime
&
gt;
60
)
{
return
intval
(
$agoTime
/
60
)
.
'分钟前'
;
}
elseif
(
$agoTime
&
lt;
86400
&
amp;&
amp;
$agoTime
&
gt;
3600
)
{
return
intval
(
$agoTime
/
3600
)
.
'小时前'
;
}
elseif
(
$agoTime
&
lt;
604800
&
amp;&
amp;
$agoTime
&
gt;
86400
)
{
return
intval
(
$agoTime
/
86400
)
.
'天前'
;
}
elseif
(
$agoTime
&
lt;
2592000
&
amp;&
amp;
$agoTime
&
gt;
604800
)
{
return
'约'
.
intval
(
$agoTime
/
604800
)
.
'周前'
;
}
elseif
(
$agoTime
&
lt;
7776000
&
amp;&
amp;
$agoTime
&
gt;
2592000
)
{
return
'约'
.
intval
(
$agoTime
/
2592000
)
.
'个月前'
;
}
else
{
return
date
(
$dateformat
,
$timestamp
)
;
}
}
将以上代码保存至smarty/plugins/modifier.date_ago.php(需要自行创建)。
使用方法:{1267623549|date_ago}