PHP时间戳函数(几分钟、几小时前、几天前,今天零点等)

2018-11-08 17:30:20

时间戳是我们在时间日期对比时常用到一个小功能,下面我先来给各位介绍strtotime时间戳转换的一些方法与利用它来做一个日期格式化的几分钟、几小时前、几天前的一个实例。

1.PHP时间戳函数将日期转化为unix时间戳

世界末日时间戳 PHP

1
echo "世界末日时间戳为:".strtotime("2012-12-21")

 2.将时间戳转化为系统时间

1
date('Y-m-d H:i:s',"1228348800");

(1)获取当天零点时间戳

1
$timetoday strtotime(date("Y-m-d",time()));

(2)获取明天零点时间戳

1
$tomorrow $timetoday + 3600*24;

 

3.PHP时间戳函数获取英文文本日期时间 示例如下:

便于比较,使用date将当时间戳与指定时间戳转换成系统时间

(1)打印明天此时的时间戳strtotime(”+1 day”)

1
2
3
4
//当前时间
echo date("Y-m-d H:i:s",time());
//明天此时时间
echo date("Y-m-d H:i:s",strtotime("+1 day"));

 (2)打印昨天此时的时间戳strtotime(”-1 day”)

1
2
3
4
//当前时间
echo date("Y-m-d H:i:s",time()) ;
//指定时间
echo date("Y-m-d H:i:s",strtotime("-1 day"));

 (3)打印下个星期此时的时间戳strtotime("+1 week")

1
2
3
4
//当前时间
echo date("Y-m-d H:i:s",time());
//下星期时间
echo date("Y-m-d H:i:s",strtotime("+1 week"));

 (4)打印上个星期此时的时间戳strtotime("-1 week")

1
2
3
4
//当前时间
echo date("Y-m-d H:i:s",time());
//上个星期此时时间
echo date("Y-m-d H:i:s",strtotime("-1 week"));

 (5)打印指定下星期几的时间戳strtotime("next Thursday")

1
2
3
4
//当前时间
echo date("Y-m-d H:i:s",time());
//下星期几时间
echo date("Y-m-d H:i:s",strtotime("next Thursday"));

 (6)打印指定上星期几的时间戳strtotime(”last Thursday”)

1
2
3
4
//当前时间
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()格式化日期时间获取指定的时间戳,实现所需要的日期时间

话说看到别人写的这么一个函数,测试了一下,有些小毛病:对于跨年日期,没有显示年份。修改如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 固有格式,不要改名。

模板中直接调用

1
{$vo.time|mdate}

 例2,简单一些的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}

 下面发一个友好时间的方法给大家

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
 * 友好时间显示
 * @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;
}

  


引用:http://www.cnblogs.com/lhm166/articles/6066762.html

  • 2019-10-15 05:53:20

    xUtils 里的DbUtils使用心得

    使用xUtils做Android数据库开发非常简便和得心应手,而且它本身还支持很多查询功能,比如一对多,select count和自定义sql查询等,并且支持事务(默认关闭) 下面是官方sample给的代码和我的一些使用心得 首先是两个实体类,对应两张表,这两张表中有一对多的关系

  • 2019-10-15 09:18:48

    腾讯 Android 面试笔试总结

    Activity中的几种启动模式 Android消息机制 IntentService 事件分发 Android性能优化、内存优化 内存优化 View的绘制 Eventbus原理 Rxjava的操作符有哪些,说说他们的作用 线程锁 锁方法和类对象啥的有啥区别 AsyncTask原理 说说MVP和MVVM的特点 Android中用到的观察者模式有哪些地方 说说google新出的Lifecycle框架 okhttp原理 Retrofit原理 RecyclerView源码、缓存分析 Binder机制 Android Jetpack Kotlin Activity中的几种启动模式

  • 2019-10-15 09:20:49

    SpringBoot注解梳理

    @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。 @Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。 @EnableAutoConfiguration 自动配置。 @ComponentScan 组件扫描,可自动发现和装配一些Bean。 @Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。 @RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。 @Autowired自动导入。 @PathVariable获取参数。 @JsonBackReference解决嵌套外链问题。 @RepositoryRestResourcepublic配合spring-boot-starter-data-rest使用。

  • 2019-10-15 09:52:00

    动图解释递归,按值传递和按引用传递的区别,线性查找和二分查找,二叉查找树

    对于大部分人,数据结构一直是一个短板,当然我也是,不是学不会,而是容易忘,就拿最简单的排序来说吧,当时学习的时候明明已经弄得很清楚了,过了一段时间不用又忘记了,还要重新再看一遍,不知道有多少小伙伴和我有一样的烦恼。今天让我们用用动图的方式学习一下数据结构中的递归和二分查找吧,这种讲解方式非常生动,而且非常容易记住和理解。