文档章节

PHP计算时间差

喵先生丿
 喵先生丿
发布于 2017/02/28 09:53
字数 690
阅读 10
收藏 0
点赞 0
评论 0

这个需求是计算两个时间的差值,当然PHP在5.3版本已经提供了相关的计算函数,本文也会有该函数的示例,除了PHP提供的解决方法之外,这里会再提供几种解决方式以供参考. 需求如下

  1. 差值小于24小时,为今天
  2. 差值小于30天,直接显示剩余天数
  3. 差值大于30天,显示1月之后

内置函数解决方案

使用函数date_diff计算两日期差值,返回的是DateInterval的object数据,直接根据相关需求进行数据处理即可.==注意:传入日期格式,对传入日期进行格式化==,当然关于天的计算标准,需要根据情况来看,比如1月1号到1月5号,系统计算出来的是4天,但是人们会认为1号到5号是5天,这个根据实际情况来进行一个细节处理.


/**
 * 传入日期格式 2017-01-23
 * @param $begin_time
 * @param $end_time
 * @return DateInterval|false
 */
function time_difference ( $begin_time , $end_time ) {
    $datetime1 = date_create ( $begin_time );
    $datetime2 = date_create ( $end_time );
    $interval = date_diff ( $datetime1 , $datetime2 );
    return $interval;
}

输出与结果

//输出
$a = time_difference('2017-1-1','2017-1-5');
var_dump($a);

//结果

object(DateInterval)#3 (15) {
  ["y"]=>
  int(0)
  ["m"]=>
  int(0)
  ["d"]=>
  int(4)
  ["h"]=>
  int(0)
  ["i"]=>
  int(0)
  ["s"]=>
  int(0)
  ["weekday"]=>
  int(0)
  ["weekday_behavior"]=>
  int(0)
  ["first_last_day_of"]=>
  int(0)
  ["invert"]=>
  int(1)
  ["days"]=>
  int(4)
  ["special_type"]=>
  int(0)
  ["special_amount"]=>
  int(0)
  ["have_weekday_relative"]=>
  int(0)
  ["have_special_relative"]=>
  int(0)
}

简单粗暴方式

根据需求,直接使用比较原始,比较有效的方式进行计算即可.当然这种方式的局限性比较大,根据情况自行决定是否使用. 代码示例

$num = strtotime('2017-1-5') - strtotime('2017-1-1');
$diff = floor($num/60/60/24);
if($diff >= 30){
    echo '1月';
}elseif($diff >=1){
    echo ($diff+1).'天'; //这里是否+1自己决定,上面已经说过,不再赘述
}elseif($diff < 1){
    echo '今天';
}

输出结果5天

时间差计算


function time2Units ( $time ) {
    $year = floor ( $time / 60 / 60 / 24 / 365 );
    $time -= $year * 60 * 60 * 24 * 365;
    $month = floor ( $time / 60 / 60 / 24 / 30 );
    $time -= $month * 60 * 60 * 24 * 30;
    $week = floor ( $time / 60 / 60 / 24 / 7 );
    $time -= $week * 60 * 60 * 24 * 7;
    $day = floor ( $time / 60 / 60 / 24 );
    $time -= $day * 60 * 60 * 24;
    $hour = floor ( $time / 60 / 60 );
    $time -= $hour * 60 * 60;
    $minute = floor ( $time / 60 );
    $time -= $minute * 60;
    $second = $time;
    $elapse = '';
    
    $unitArr = array ( '年' => 'year' , 
                       '个月' => 'month' ,
                       '周' => 'week' , 
                       '天' => 'day' ,
                       '小时' => 'hour' ,
                       '分钟' => 'minute' , 
                       '秒' => 'second'
                       );
    
    foreach ( $unitArr as $cn => $u ) {
        if ( $$u > 0 ) {
            $elapse = $$u . $cn;
            break;
        }
    }
    
    return $elapse;
}

输出与解决


//输出
$num = strtotime('2017-1-5') - strtotime('2017-1-1');
echo time2Units ( $num );

//结果
4天

这里就介绍着三种计算时间差的方法,当然计算时间差方法不只是这三种,可以说这种方法根据自己的想法来做,会出现很多种计算方式,可能每个人的做法都不相同,当然最后的计算结果对了才是最重要的.

© 著作权归作者所有

共有 人打赏支持
喵先生丿
粉丝 3
博文 14
码字总数 5275
作品 0
天津
程序员
js 计算两个时间的时间差

写在前面: 如题,就像题目说的需要计算出时间差,虽然不太难,但这个需求经常会在项目中遇到的,我在这边做一下整理,希望能够尽量全的整理出来。有需要的朋友可以做一下参考,喜欢的可以点...

OB丶Koro1 ⋅ 2017/10/16 ⋅ 0

Memcache的安装使用及与mysql交互实例

一、Memcache介绍 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等...

行者PHPer ⋅ 2012/05/06 ⋅ 0

在oracle中计算时间差

计算时间差是oracle data数据类型的一个常见问题。oracle支持日期计算,你可以创建诸如“日期1-日期2”这样的表达式来计算这两个日期之间的时间差。 一旦你发现了时间差异,你可以使用简单的...

1880106122065705 ⋅ 2010/12/09 ⋅ 0

帮我设计一个更高效的sql语句

数据库一个表,有id,type(类型)和getdate(时间),要求所有type为2的项,计算离它最近的type为1的项的时间差,并统计出这个时间差的最大前十,最短前十,以及平均值。 我现在是最原始的方...

chencliff ⋅ 2011/07/18 ⋅ 9

mysql 计算时间差

ROUND(timetosec(timediff(m.StartTime, now()))/60) 解析: 比较m.StartTime字段的时间与now()现在的时间差。 timediff : 计算时间差 timetosec:转化为秒 ROUND :取整...

IT_小翼 ⋅ 2015/07/28 ⋅ 0

2017-05-09工作小结

1、关于B/S下的时间同步 之前接到一个小活,来处理javascript异步情况下,保持计时器校准的功能。原代码如下: var T,S,KT,KS;function gameKanJiangDataC(diffTime, actionNo){var $dom=$(...

高安宇 ⋅ 2017/05/09 ⋅ 0

Sprite kit 每秒间隔 update 频率伪造

今天用spritekit做了一个小游戏,很好用是很好用但是非常困惑的是里面竟然没有从上次更新到现在的时间差传入方法中,这样的话,我想在update方法中实现每两秒发射一个子弹的功能就变得不好办...

孙启超 ⋅ 2014/01/21 ⋅ 0

怎么防止多用户同一时间抢购同一商品,防止高并发同时下单同一商品,大牛们献出你们所积累的知识吧?请教

最近在做抢购系统,但头疼的是,在多用户高并发的情况下经常会库存出现问题。排查到,在同一时间内多用户同时下单导致查询和插入不同步了,而查询中跟插入又有时间差而在高并发的情况下导致库...

键盘浪人 ⋅ 2014/12/25 ⋅ 10

机房收费系统——上下机

上个月准备考试,机房收费系统就停了,考试完了任务还得继续。说到上下机可能是最令人头疼的,尤其是下机,需要查的表比较多而且数据类型也很多,思路理不清根本无从下手。 上机窗体首先要判...

邵鸿鑫 ⋅ 2013/11/05 ⋅ 0

OC中的NSDate类

#import <Foundation/Foundation.h> #define PRIN(A) NSLog(@"%@",A) int main(int argc, const char argv[]) { @autoreleasepool { //NSDate时间类 //1.获取系统时间(和北京时间有八个小时的......

鹿微微鹿 ⋅ 2016/04/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部