php时间区间,优化显示
<?php
/**
* 类似微信的时间显示
* 规则是:今天的,显示几秒前,几分钟前,几小时前,昨天的显示昨天 上午 XX:XX
* 再往前,本周的,显示周几+时间,再往前,本年的,显示月日+时间,再往前,显示年月日+时间
* User: tu6ge
* Date: 2016/7/21
* Time: 15:21
*/ function timespan($time){
$the_day_time = strtotime(date('Y-m-d',$time));
$one_day_second = $time-$the_day_time;
if($one_day_second<3600*6){
$pre_name = '凌晨';
}elseif($one_day_second<3600*12){
$pre_name = '上午';
}elseif($one_day_second<3600*18){
$pre_name = '下午';
}else{
$pre_name = '晚上';
}
$now_time = time();
$today_time = strtotime(date('Y-m-d'));
$yesterday_time = $today_time-86400;
$now_week = date('w',$now_time);
$now_week==0 && $now_week=7;
$now_week_time = $today_time-($now_week-1)*86400;
$now_year_time = strtotime(date('Y-01-01')); $the_week = date('w',$time);
$the_week==0 && $the_week=7;
$week_pre_name = '';
switch ($the_week){
case 1:
$week_pre_name = '一';
break;
case 2:
$week_pre_name = '二';
break;
case 3:
$week_pre_name = '三';
break;
case 4:
$week_pre_name = '四';
break;
case 5:
$week_pre_name = '五';
break;
case 6:
$week_pre_name = '六';
break;
case 7:
$week_pre_name = '日';
break;
default:
$week_pre_name = '';
} $test = '';
if($time>=$now_time){
//未来
$test = '';
}elseif($time>$today_time){
//今天
$diff_time = $now_time-$time;
if($diff_time<60){
$test = $diff_time.'秒前';
}elseif($diff_time<3600){
$test = intval($diff_time/60).'分钟前';
}else{
$test = intval($diff_time/3600).'小时前';
}
}elseif($time>$yesterday_time){
//昨天
$test = '昨天 '.$pre_name.' '.date('H:i',$time);
}elseif($time>$now_week_time){
//这周内
$test = '周'.$week_pre_name.' '.$pre_name.' '.date('H:i',$time);
}elseif($time>$now_year_time){
//今年
$test = date('m月d日',$time).' '.$pre_name.' '.date('H:i',$time);
}else{
//更早
$test = date('Y月m月d日',$time).' '.$pre_name.' '.date('H:i',$time);
}
return $test;
} $time = time()-2;
for($i=0;$i<30;$i++){
echo timespan($time);
echo '<br>';
$time = $time-3600*6;
} //########################上面是用函数实现的
//########################下面是用对象实现的 define('NOW_TIME',time());
define('TODAY_TIME',strtotime(date('Y-m-d',NOW_TIME)));
define('YESTERDAY_TIME',TODAY_TIME-86400);
$now_week = date('w',NOW_TIME);
$now_week==0 && $now_week=7;
define('NOW_WEEK_TIME',TODAY_TIME-($now_week-1)*86400);
define('NOW_YEAR_TIME',strtotime(date('Y-01-01'))); class timespan{
public $time; //要计算的时间的时间戳
const now_time=NOW_TIME;
const today_time=TODAY_TIME;
const yesterday_time = YESTERDAY_TIME;
const now_week_time = NOW_WEEK_TIME;
const now_year_time = NOW_YEAR_TIME;
function __construct($time=null)
{
!empty($time) && $this->time = $time;
$this->time = $time;
} /**
* 返回 上午,下午,晚上,凌晨
* @param null $time
* @return string
*/
function get_pre_name($time=null){
!empty($time) && $this->time = $time;
$the_day_time = strtotime(date('Y-m-d',$this->time));
$one_day_second = $this->time-$the_day_time;
if($one_day_second<3600*6){
$pre_name = '凌晨';
}elseif($one_day_second<3600*12){
$pre_name = '上午';
}elseif($one_day_second<3600*18){
$pre_name = '下午';
}else{
$pre_name = '晚上';
}
return $pre_name;
} function get_week_name($time=null){
!empty($time) && $this->time = $time;
$the_week = date('w',$this->time);
$the_week==0 && $the_week=7;
$week_pre_name = '';
switch ($the_week){
case 1:
$week_pre_name = '一';
break;
case 2:
$week_pre_name = '二';
break;
case 3:
$week_pre_name = '三';
break;
case 4:
$week_pre_name = '四';
break;
case 5:
$week_pre_name = '五';
break;
case 6:
$week_pre_name = '六';
break;
case 7:
$week_pre_name = '日';
break;
default:
$week_pre_name = '';
}
return $week_pre_name;
}
function formate($time = null){
!empty($time) && $this->time = $time;
$test = '';
if($this->time>=self::now_time){
//未来
$test = '';
}elseif($this->time>self::today_time){
//今天
$diff_time = self::now_time-$this->time;
if($diff_time<60){
$test = $diff_time.'秒前';
}elseif($diff_time<3600){
$test = intval($diff_time/60).'分钟前';
}else{
$test = intval($diff_time/3600).'小时前';
}
}elseif($this->time>self::yesterday_time){
//昨天
$pre_name = $this->get_pre_name();
$test = '昨天 '.$pre_name.' '.date('H:i',$this->time);
}elseif($this->time>self::now_week_time){
//这周内
$pre_name = $this->get_pre_name();
$week_pre_name = $this->get_week_name();
$test = '周'.$week_pre_name.' '.$pre_name.' '.date('H:i',$this->time);
}elseif($this->time>self::now_year_time){
//今年
$pre_name = $this->get_pre_name();
$test = date('m月d日',$this->time).' '.$pre_name.' '.date('H:i',$this->time);
}else{
//更早
$pre_name = $this->get_pre_name();
$test = date('Y月m月d日',$this->time).' '.$pre_name.' '.date('H:i',$this->time);
}
return $test;
}
}
//调用方法
$obj = new timespan();
for($i=0;$i<30;$i++){
echo $obj->formate($time);
echo '<br>';
$time = $time-3600*6;
}
对于技术来说,写这个东西,真没技术含量,只所以贴出了,是想表明我想做产品的态度
php时间区间,优化显示的更多相关文章
- pandas处理时间序列(2):DatetimeIndex、索引和选择、含有重复索引的时间序列、日期范围与频率和移位、时间区间和区间算术
一.时间序列基础 1. 时间戳索引DatetimeIndex 生成20个DatetimeIndex from datetime import datetime dates = pd.date_rang ...
- 2022-09-11-Typecho_RSS优化显示全文
layout: post cid: 26 title: Typecho RSS优化显示全文 slug: 26 date: 2022/09/11 15:53:38 updated: 2022/09/11 ...
- SQL Server 判定时间是否在某个时间区间内
* FROM sys.objects WHERE name=N'uF_IsRange_Date' AND [type]='FN') DROP FUNCTION uF_IsRange_Date GO S ...
- My97设置开始、结束 时间区间及输入框不能输入只能选择的方法
时间区间开始: <input type="text" id = "first_time" name="first_time" valu ...
- bootstrap时间区间设置方法
我们在开发过程中经常有时间区间的要求,在多次"失败"及翻阅资料之后终于找到了适合我的方法,所以给大家分享出来. 基本需求为可以设置时间,设置时间区间,后一时间日期不可提前于前一时间 ...
- Js:消息弹出框、获取时间区间、时间格式、easyui datebox 自定义校验、表单数据转化json、控制两个日期不能只填一个
(function ($) { $.messageBox = function (message) { $.messager.show({ title:'消息框提示', msg:message, sh ...
- JS------获取一个时间区间的所有天
1:获取一个时间区间的所有日期 function getDiffDate(start, end) { var startTime = getDate(start); var endTime = get ...
- 减少TIME_WAIT时间的优化配置
减少TIME_WAIT时间的优化配置 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: net.ipv4.tcp_max_syn_backlog=8192 增加TCP S ...
- vue使用iview Timeline 时间轴不显示问题
vue Timeline 时间轴不显示渲染的效果 官网代码 <Timeline pending> <TimelineItem>发布1.0版本</TimelineItem& ...
- JAVA判断时间是否在时间区间内
package com.liying.tiger.test; import java.text.ParseException; import java.text.SimpleDateFormat; i ...
随机推荐
- ELK+kafka docker快速搭建+.NetCore中使用
ELK开源实时日志分析平台.ELK是Elasticsearch,Logstash,Kibana 的缩写. Elasticsearch:是个开源分布式搜索引擎,简称ESLogstash:是一个完全开源的 ...
- Rancher v1.6.29 Docker单节点部署
前言: Docker镜像中心,有两个版本的rancher(1.X),镜像名称为:rancher/server,而rancher(2.X)的镜像名称是rancher/rancher 去daocloud官 ...
- Linux线程简单介绍
1.进程与线程 2.使用线程的理由 3.有关线程操作的函数 4.线程之间的互斥 5.线程之间的同步 6.试题最终代码 1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构 ...
- CentOS7 安装Oracle12c数据库
在centos7上安装oracle是一个比较麻烦的事,在安装前需要做一些服务器的准备工作 我是在虚拟机里测试的所以需要下载centos7的镜像,可以去官网然后找到中国的镜像站用迅雷插件下载速度比较快这 ...
- nacos config基本使用
说明 Nacos is an easy-to-use dynamic service discovery, configuration and service management platform ...
- c# 对 struct为什么不能继承类和结构的思考
1.类.结构在使用的时候可以不调用构造函数,如果能够继承类,这种情况下不能够初始化基类,因为不执行构造函数 2.结构.所有的结构类型都默认是 sealed,通过 反汇编可以看到 ,这就阻止了结构被继 ...
- WPF 中的style 样式
WPF相较于以前学的WinForm,WPF在UI设计与动画方面的炫丽是最吸引我来学习的.在WPF中XMAL代码的引入使得代码的编写能够前后端分离,为获得更好的界面,也使得我们不得不分出一半的时间花在前 ...
- ThreadLocal, volatile, synchronized, map, epoll, AQS简单总结
ThreadLocal ThreadLocal主要是为了解决内存泄漏的问题,它是一种弱引用: 引用总共有四种,,我简单列一下: 强引用(Strong Reference):正常引用,根据垃圾回收算法, ...
- php Abstract 抽象类 与 Interface的
一.Abstract Class 与 Interface 的构造 抽象类 Abstract Class <?php abstract class A { abstract public func ...
- eh-admin一套前后端一体的轻量级后台管理系统
https://gitee.com/DawnYang/eh-admin 主要技术 后端技术:Spring Boot,Apache Shiro,MyBatis-Plus等: 前端技术:Jquery,La ...