將時(shí)間以距今多久的形式表示,PHP,js雙版本
更新時(shí)間:2012年09月25日 22:44:00 作者:
依然從項(xiàng)目需求出發(fā),些了這個(gè)函數(shù),PHP版本寫(xiě)了一個(gè)Smarty的插件,只要簡(jiǎn)單的修改下函數(shù)名就能直接在PHP中調(diào)用了,同時(shí),為了AJAX翻頁(yè)時(shí)所獲取JSON數(shù)據(jù)中的時(shí)間以同樣的方式顯示,因此又寫(xiě)了一個(gè)JS的版本
廢話(huà)不多說(shuō)直接上代碼。
PHP FOR Smarty
* Name: time_ago
* Purpose: 將時(shí)間戳專(zhuān)為距當(dāng)前時(shí)間的表現(xiàn)形式
* 1分鐘內(nèi)按秒
* 1小時(shí)內(nèi)按分鐘顯示
* 1天內(nèi)按時(shí)分顯示
* 3天內(nèi)以昨天,前天顯示
* 超過(guò)3天顯示具體日期
*
* @author Peter Pan
* @param int $time input int
*/
function smarty_modifier_time_ago($time) {
$time_deff = time() - $time;
$retrun = '';
if ($time_deff >= 259200) {
$retrun = date('Y-m-d H:i', $time);
} else if ($time_deff >= 172800) {
$retrun = "前天 " . date('H:i', $time);
} else if ($time_deff >= 86400) {
$retrun = "昨天" . date('H:i', $time);
} else if ($time_deff >= 3600) {
$hour = intval($time_deff / 3600);
$minute = intval(($time_deff % 3600) / 60);
$retrun = $hour . '小時(shí)';
if ($minute > 0) {
$retrun .= $minute . '分鐘';
}
$retrun .= '前';
} else if ($time_deff >= 60) {
$minute = intval($time_deff / 60);
$second = $time_deff % 60;
$retrun = $minute . '分';
if ($second > 0) {
$retrun .= $second . '秒';
}
$retrun .= '前';
}else{
$retrun = $time_deff.'秒前';
}
return $retrun;
}
Javascript
JS比較復(fù)雜一點(diǎn),分為3個(gè)函數(shù)實(shí)現(xiàn)
/**
* 字符串填充
* @param string str 要進(jìn)行填充的字符串
* @param int len 目標(biāo)字符串長(zhǎng)度
* @param str chr 用于填充的字符 默認(rèn)為空格
* @param str dir 填充位置 left|right|both 默認(rèn)為right
*/
function strPad(str, len, chr, dir){
str = str.toString();
len = (typeof len == 'number') ? len : 0;
chr = (typeof chr == 'string') ? chr : ' ';
dir = (/left|right|both/i).test(dir) ? dir : 'right';
var repeat = function(c, l) {
var repeat = '';
while (repeat.length < l) {
repeat += c;
}
return repeat.substr(0, l);
}
var diff = len - str.length;
if (diff > 0) {
switch (dir) {
case 'left':
str = '' + repeat(chr, diff) + str;
break;
case 'both':
var half = repeat(chr, Math.ceil(diff / 2));
str = (half + str + half).substr(1, len);
break;
default:
str = '' + str + repeat(chr, diff);
}
}
return str;
}
/**
* 格式化日期
* 類(lèi)似php Date函數(shù),傳入U(xiǎn)nix 時(shí)間戳(秒級(jí))返回指定格式
* 格式(不區(qū)分大小寫(xiě)):
* y 表示4位年份
* m 表示2位月份
* d 表示2位日
* h 表示2位時(shí)
* i 表示2位分
* s 表示2位秒
*/
function formatDate(format,timestamp) {
var date = new Date(parseInt(timestamp) * 1000);
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
month = strPad(month,2,'0','left');
day = strPad(day,2,'0','left');
hour = strPad(hour,2,'0','left');
minute = strPad(minute,2,'0','left');
second = strPad(second,2,'0','left');
format = format.replace(/y/gi,year);
format = format.replace(/m/gi,month);
format = format.replace(/d/gi,day);
format = format.replace(/h/gi,hour);
format = format.replace(/i/gi,minute);
format = format.replace(/s/gi,second);
return format;
}
function timeAgo(time) {
var nowTime = Date.parse(new Date()) / 1000;
var time_deff = nowTime - time;
retrun = '';
if (time_deff >= 259200) {
retrun = formatDate('Y-m-d H:i', time);
} else if (time_deff >= 172800) {
retrun = "前天 " + formatDate('H:i', time);
} else if (time_deff >= 86400) {
retrun = "昨天" + formatDate('H:i', time);
} else if (time_deff >= 3600) {
hour = parseInt(time_deff / 3600);
minute = parseInt((time_deff % 3600) / 60);
retrun = hour + '小時(shí)';
if (minute > 0) {
retrun += minute + '分鐘';
}
retrun += '前';
} else if (time_deff >= 60) {
minute = parseInt($time_deff / 60);
second = time_deff % 60;
retrun = minute + '分';
if (second > 0) {
retrun += second + '秒';
}
retrun += '前';
}else{
retrun = time_deff +'秒前';
}
return retrun;
}
PHP FOR Smarty
復(fù)制代碼 代碼如下:
* Name: time_ago
* Purpose: 將時(shí)間戳專(zhuān)為距當(dāng)前時(shí)間的表現(xiàn)形式
* 1分鐘內(nèi)按秒
* 1小時(shí)內(nèi)按分鐘顯示
* 1天內(nèi)按時(shí)分顯示
* 3天內(nèi)以昨天,前天顯示
* 超過(guò)3天顯示具體日期
*
* @author Peter Pan
* @param int $time input int
*/
function smarty_modifier_time_ago($time) {
$time_deff = time() - $time;
$retrun = '';
if ($time_deff >= 259200) {
$retrun = date('Y-m-d H:i', $time);
} else if ($time_deff >= 172800) {
$retrun = "前天 " . date('H:i', $time);
} else if ($time_deff >= 86400) {
$retrun = "昨天" . date('H:i', $time);
} else if ($time_deff >= 3600) {
$hour = intval($time_deff / 3600);
$minute = intval(($time_deff % 3600) / 60);
$retrun = $hour . '小時(shí)';
if ($minute > 0) {
$retrun .= $minute . '分鐘';
}
$retrun .= '前';
} else if ($time_deff >= 60) {
$minute = intval($time_deff / 60);
$second = $time_deff % 60;
$retrun = $minute . '分';
if ($second > 0) {
$retrun .= $second . '秒';
}
$retrun .= '前';
}else{
$retrun = $time_deff.'秒前';
}
return $retrun;
}
Javascript
JS比較復(fù)雜一點(diǎn),分為3個(gè)函數(shù)實(shí)現(xiàn)
復(fù)制代碼 代碼如下:
/**
* 字符串填充
* @param string str 要進(jìn)行填充的字符串
* @param int len 目標(biāo)字符串長(zhǎng)度
* @param str chr 用于填充的字符 默認(rèn)為空格
* @param str dir 填充位置 left|right|both 默認(rèn)為right
*/
function strPad(str, len, chr, dir){
str = str.toString();
len = (typeof len == 'number') ? len : 0;
chr = (typeof chr == 'string') ? chr : ' ';
dir = (/left|right|both/i).test(dir) ? dir : 'right';
var repeat = function(c, l) {
var repeat = '';
while (repeat.length < l) {
repeat += c;
}
return repeat.substr(0, l);
}
var diff = len - str.length;
if (diff > 0) {
switch (dir) {
case 'left':
str = '' + repeat(chr, diff) + str;
break;
case 'both':
var half = repeat(chr, Math.ceil(diff / 2));
str = (half + str + half).substr(1, len);
break;
default:
str = '' + str + repeat(chr, diff);
}
}
return str;
}
/**
* 格式化日期
* 類(lèi)似php Date函數(shù),傳入U(xiǎn)nix 時(shí)間戳(秒級(jí))返回指定格式
* 格式(不區(qū)分大小寫(xiě)):
* y 表示4位年份
* m 表示2位月份
* d 表示2位日
* h 表示2位時(shí)
* i 表示2位分
* s 表示2位秒
*/
function formatDate(format,timestamp) {
var date = new Date(parseInt(timestamp) * 1000);
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
month = strPad(month,2,'0','left');
day = strPad(day,2,'0','left');
hour = strPad(hour,2,'0','left');
minute = strPad(minute,2,'0','left');
second = strPad(second,2,'0','left');
format = format.replace(/y/gi,year);
format = format.replace(/m/gi,month);
format = format.replace(/d/gi,day);
format = format.replace(/h/gi,hour);
format = format.replace(/i/gi,minute);
format = format.replace(/s/gi,second);
return format;
}
function timeAgo(time) {
var nowTime = Date.parse(new Date()) / 1000;
var time_deff = nowTime - time;
retrun = '';
if (time_deff >= 259200) {
retrun = formatDate('Y-m-d H:i', time);
} else if (time_deff >= 172800) {
retrun = "前天 " + formatDate('H:i', time);
} else if (time_deff >= 86400) {
retrun = "昨天" + formatDate('H:i', time);
} else if (time_deff >= 3600) {
hour = parseInt(time_deff / 3600);
minute = parseInt((time_deff % 3600) / 60);
retrun = hour + '小時(shí)';
if (minute > 0) {
retrun += minute + '分鐘';
}
retrun += '前';
} else if (time_deff >= 60) {
minute = parseInt($time_deff / 60);
second = time_deff % 60;
retrun = minute + '分';
if (second > 0) {
retrun += second + '秒';
}
retrun += '前';
}else{
retrun = time_deff +'秒前';
}
return retrun;
}
您可能感興趣的文章:
- javascript實(shí)現(xiàn)的距離現(xiàn)在多長(zhǎng)時(shí)間后的一個(gè)格式化的日期
- win2003或linux服務(wù)器一般多久重啟一次
- php實(shí)現(xiàn)用已經(jīng)過(guò)去多長(zhǎng)時(shí)間的方式顯示時(shí)間
- 常見(jiàn)瀏覽器多長(zhǎng)時(shí)間會(huì)提示“腳本運(yùn)行時(shí)間過(guò)長(zhǎng)”總結(jié)
- 查看 MySQL 已經(jīng)運(yùn)行多長(zhǎng)時(shí)間的方法
- 離22周歲距離多長(zhǎng)時(shí)間的計(jì)算[適合沒(méi)到22周歲的朋友]
- 如何計(jì)算下載一個(gè)文件需要多長(zhǎng)時(shí)間?
- iOS計(jì)算上次日期距離現(xiàn)在多久的代碼
相關(guān)文章
PHP基于PDO實(shí)現(xiàn)的SQLite操作類(lèi)【包含增刪改查及事務(wù)等操作】
這篇文章主要介紹了PHP基于PDO實(shí)現(xiàn)的SQLite操作類(lèi),包含增刪改查及事務(wù)等操作實(shí)現(xiàn)技巧與使用方法,需要的朋友可以參考下2017-06-06PHP用strstr()函數(shù)阻止垃圾評(píng)論(通過(guò)判斷a標(biāo)記)
假如你的網(wǎng)站垃圾評(píng)論很多,大部分垃圾評(píng)論是帶鏈接的,因?yàn)橐黾臃聪蜴溄勇?,所以你可以使用下面的小技巧?lái)杜絕這些帶鏈接的垃圾評(píng)論2013-09-09php計(jì)劃任務(wù)之驗(yàn)證是否有多個(gè)進(jìn)程調(diào)用同一個(gè)job的方法
這篇文章主要介紹了php計(jì)劃任務(wù)之驗(yàn)證是否有多個(gè)進(jìn)程調(diào)用同一個(gè)job的方法,涉及php針對(duì)計(jì)劃任務(wù)中進(jìn)程調(diào)用的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12php file_get_contents取文件中數(shù)組元素的方法
下面小編就為大家?guī)?lái)一篇php file_get_contents取文件中數(shù)組元素的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04