php格式化时间戳显示友好的时间实现思路及代码


Posted in PHP onOctober 23, 2014

在项目中时间一律显示为2014-10-20 10:22显得很呆板。在微博、QQ空间等网站通常会显示为几秒前,几分钟前,几小时前等容易阅读的时间,我们称之为友好的时间格式。那么用php怎么实现呢?

大体思路如下:

如果是跨年并且大于3天就显示为具体的时间

如果是今天的

如果是一分钟内则显示几秒之前

如果是一小时内则显示几分钟前

如果是当天且大于一小时则显示为几小时前

如果是昨天则显示为昨天几点

如果是前天则显示为前天几点

如果大于三天(没有跨年)则显示为几月几号

根据以上思路就不难写出实现代码了:

实现代码如下:

//格式化友好显示时间
function formatTime($time){
$now=time();
$day=date('Y-m-d',$time);
$today=date('Y-m-d');

$dayArr=explode('-',$day);
$todayArr=explode('-',$today);

//距离的天数,这种方法超过30天则不一定准确,但是30天内是准确的,因为一个月可能是30天也可能是31天
$days=($todayArr[0]-$dayArr[0])*365+(($todayArr[1]-$dayArr[1])*30)+($todayArr[2]-$dayArr[2]);
//距离的秒数
$secs=$now-$time;

if($todayArr[0]-$dayArr[0]>0 && $days>3){//跨年且超过3天
return date('Y-m-d',$time);
}else{

if($days<1){//今天
if($secs<60)return $secs.'秒前';
elseif($secs<3600)return floor($secs/60)."分钟前";
else return floor($secs/3600)."小时前";
}else if($days<2){//昨天
$hour=date('h',$time);
return "昨天".$hour.'点';
}elseif($days<3){//前天
$hour=date('h',$time);
return "前天".$hour.'点';
}else{//三天前
return date('m月d号',$time);
}
}
}
PHP 相关文章推荐
关于mysql 字段的那个点为是定界符
Jan 15 PHP
一些常用的php简单命令代码集锦
Sep 24 PHP
PHP 5.0对象模型深度探索之属性和方法
Mar 27 PHP
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
破解图片防盗链的代码(asp/php)测试通过
Jul 02 PHP
php object转数组示例
Jan 15 PHP
PHP写的资源下载防盗链类分享
May 12 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
PHP bin2hex()函数基础实例讲解
Feb 11 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 #PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 #PHP
10个实用的PHP正则表达式汇总
Oct 23 #PHP
PHP中怎样防止SQL注入分析
Oct 23 #PHP
PDO防注入原理分析以及使用PDO的注意事项总结
Oct 23 #PHP
常用PHP框架功能对照表
Oct 23 #PHP
C/S和B/S两种架构区别与优缺点分析
Oct 23 #PHP
You might like
php自动获取目录下的模板的代码
2010/08/08 PHP
PHP防止跨域提交表单
2013/11/01 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
Python实现接受任意个数参数的函数方法
2018/04/21 Python
解决DataFrame排序sort的问题
2018/06/07 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
python虚拟环境完美部署教程
2019/08/06 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
说出数据连接池的工作机制是什么?
2013/04/19 面试题
结婚周年感言
2014/02/24 职场文书
违反交通法规检讨书
2014/09/10 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis
nginx之内存池的实现
2022/06/28 Servers