非常全面的php日期时间运算汇总


Posted in PHP onNovember 04, 2015

实例讲解之前,先来介绍几个核心函数: 
mktime 函数
mktime() 函数返回一个日期的 Unix 时间戳。
参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。
参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。
语法:mktime(hour,minute,second,month,day,year,is_dst)
参数               描述 
hour       可选。规定小时。 
minute   可选。规定分钟。 
second   可选。规定秒。 
month    可选。规定用数字表示的月。 
day         可选。规定天。 
year        可选。规定年。在某些系统上,合法值介于 1901 - 2038 之间。不过在 PHP 5 中已经不存在这个限制了。 
is_dst  可选。如果时间在日光节约时间(DST)期间,则设置为1,否则设置为0,若未知,则设置为-1。  
自 5.1.0 起,is_dst 参数被废弃。因此应该使用新的时区处理特性。  
例子:mktime() 函数对于日期运算和验证非常有用。它可以自动校正越界的输入:  

<?php 
echo(date("M-d-Y",mktime(0,0,0,12,36,2001))); 
echo(date("M-d-Y",mktime(0,0,0,14,1,2001))); 
echo(date("M-d-Y",mktime(0,0,0,1,1,2001))); 
echo(date("M-d-Y",mktime(0,0,0,1,1,99))); 
?>

输出:  

Jan-05-2002 
Feb-01-2002 
Jan-01-2001 
Jan-01-1999

strtotime 函数
strtotime() 函数将任何英文文本的日期时间描述解析为 Unix 时间戳。
语法:strtotime(time,now)
参数      描述 
time    规定要解析的时间字符串。 
now     用来计算返回值的时间戳。如果省略该参数,则使用当前时间。   
  一周之后:  strtotime("+1 week") ;
  一周之前:  strtotime("-1 week") ;
  一月之后:  strtotime("+1 months") ;
  一天之后:  strtotime("+1 days") ;      
  30秒之后 strtotime( " +30 seconds " );
  20分钟之后 strtotime( " +20 minutes " );
  12个小时之后 strtotime( " +12 hours " );

date 函数
date() 函数格式化一个本地时间/日期。
语法
date(format,timestamp) 
date_default_timezone_set 函数
date_default_timezone_set() 函数设置用在脚本中所有日期/时间函数的默认时区。
date_default_timezone_set(timezone)

实例 

第一种情况是没有数据库,只是得到的日期值进行比较的话,那就得完全用php的时间日期函数计算了,如下:

比如要计算2015-9-5到2015-9-18还有多少天: 

<?php 
$startdate=strtotime("2015-9-5"); 
$enddate=strtotime("2015-9-18"); //上面的php时间日期函数已经把日期变成了时间戳,就是变成了秒。这样只要让两数值相减,然后把秒变成天就可以了,比较的简单,如下: 
$days=round(($enddate-$startdate)/3600/24) ; 
echo $days; //days为得到的天数; 
?>

第二种 孩子的成长

<? 
date_default_timezone_set('Asia/Shanghai'); 
//以上一句为设置时区,其实不设也行,但是zde debug的时候会有提示,说什么不安全的函数…添上吧。 
 
echo date('Y-m-d H:i:s').' 今天是'.date('Y').'年的第'.date('W').'周'; 
 
$stime='2005-11-03 10:08'; 
echo "<br/><br/>***自出生(<font color=blue>$stime</font>)以来…:<br/><br/>"; 
echo "今天是第<font color=red><b>".Lnbsp(daysofnow($stime),3)."</b></font>天<br/>"; 
echo "今天是第<font color=red><b>".Lnbsp(weeksofnow($stime),3)."</b></font>周<br/>"; 
echo "今天是第<font color=red><b>".Lnbsp(monthsofnow($stime),3)."</b></font>个月<br/>"; 
echo "今天是第<font color=red><b>".Lnbsp(yearsofnow($stime),3)."</b></font>年<br/>"; 
/* 
$output=sprintf(" 今天是第<font color=red><b>%03d</b></font>天<br/>今天是第< font color=red><b>%03d</b></font>周<br/>今天是第< font color=red><b>%03d</b></font>个月<br/>今天是第< font color=red><b>%03d</b></font>年<br/& gt;",daysofnow($stime),weeksofnow($stime),monthsofnow($stime),yearsofnow($stime)); 
echo $output; 
*/ 
 
function weeksofnow($stime) 
{ 
 $ftime=strtotime($stime); 
 $fweeks=date('w',$ftime); 
 if ($fweeks==0) $fweeks=7; 
 $nweeks=date('w'); 
 if ($nweeks==0) $nweeks=7; 
 $ftemp=strtotime(date('Y-m-d 00:00:00',$ftime))-$fweeks*60*60*24; 
 $ntemp=strtotime(date('Y-m-d 00:00:00',time()))+(7-$nweeks)*60*60*24; 
 //echo date('w',$ftemp)."<br/>....<br/>".date('w',$ntemp)."<br/>"; 
 return ($ntemp-$ftemp)/60/60/24/7; 
} 
 
function daysofnow($stime) 
{ 
 $ftime=strtotime($stime); 
 return ceil(abs((time()-$ftime)/(60*60*24))); 
} 
 
function monthsofnow($stime) 
{ 
 $ftime=strtotime($stime); 
 $fmonth=date('m',$ftime); 
 $fyear=date('Y',$ftime); 
 $nmonth=date('m'); 
 $nyear=date('Y'); 
 $result=($nyear-$fyear)*12+$nmonth-$fmonth+1; 
 return $result; 
} 
 
function yearsofnow($stime) 
{ 
 $ftime=strtotime($stime); 
 $fyear=date('Y',$ftime); 
 $nyear=date('Y'); 
 return $nyear-$fyear+1; 
} 
 
// 下面的函数只是加空格用的,不是核心内容,只为美观 
function Lnbsp($data,$num) 
{ 
 $result=trim($data); 
 for($i=$num;$i>=strlen($data);$i--) { 
 $result=' '.$result; 
 } 
 return $result; 
} 
?>

第三种 情况:明天,下个月和明年的日期,就可以用以下的代码:

$tomorrow = date('Y-m-d',mktime (0,0,0,date("m"),date("d")+1,date("Y"))); 
$nextmonth = date('Y-m',mktime (0,0,0,date("m")+1,date("d")+1,date("Y"))); 
$nextyear = date('Y',mktime (0,0,0,date("m"),date("d"),date("Y")+1)); 
 
echo $tomorrow.'<br/>'; 
echo $nextmonth.'<br/>'; 
echo $nextyear.'<br/>';

第四种情况:工作时间(刨除假日) 

<? 
$startDate="2001-12-12"; 
$endDate="2002-11-1"; 
 
$holidayArr=array("05-01","05-02","10-01","10-01","10-02","10-03","10-04","10-05","01-26","01-27","01-28","01-29"); 
 //假期日期数组,比方国庆,五一,春节等 
$endWeek=2; 
 //周末是否双休.双休为2,仅仅星期天休息为1,没有休息为0 
 
$beginUX=strtotime($startDate); 
$endUX=strtotime($endDate); 
 
for($n=$beginUX;$n<=$endUX;$n=$n+86400){ 
 $week=date("w",$n); 
 $MonDay=date("m-d",$n); 
 if($endWeek){//去处周末休息 
 if($endWeek==2){ 
 if($week==0||$week==6) continue; 
 } 
 if($endWeek==1){ 
 if($week==0) continue; 
 } 
 } 
 if(in_array($MonDay,$holidayArr)) continue; 
 $totalHour+=10;//每天工作10小时 
} 
echo "开始日期:$startDate<BR>"; 
echo "结束日期:$endDate<BR>"; 
echo "共花了".$totalHour."小时"; 
?>

 
 第五种情况:给出秒算小时

<?php 
function transform($sec){ 
 
 $output = ''; 
 
 $hours = floor($sec / 3600); 
 $remainSeconds = $sec % 3600; 
 
 $minutes = floor($remainSeconds / 60); 
 $seconds = $sec - $hours * 3600 - $minutes * 60; 
 
 if($sec >= 3600){ 
 $output .= $hours.' h / '; 
 $output .= $minutes.' m / '; 
 } 
 
 if($sec >= 60 && $sec < 3600){ 
 $output .= $minutes.' m / '; 
 } 
 
 return $output .= $seconds.' s '; 
} 
 
echo transform(3231803); 
 
?>

以上就是为大家提供的php日期时间运算全部实例,希望对大家的学习有所帮助。

PHP 相关文章推荐
不错的PHP学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
PHP开发不能违背的安全规则 过滤用户输入
May 01 PHP
php删除文件夹及其文件夹下所有文件的函数代码
Jan 23 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
Yii2实现ajax上传图片插件用法
Apr 28 PHP
thinkphp自带验证码全面解析
Sep 18 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
Oct 07 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 PHP
基于laravel缓冲cache的用法详解
Oct 23 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 #PHP
PHP实现HTML页面静态化的方法
Nov 04 #PHP
php实现网站留言板功能
Nov 04 #PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 #PHP
两种php去除二维数组的重复项方法
Nov 04 #PHP
PHP扩展开发教程(总结)
Nov 04 #PHP
PHP实现GIF图片验证码
Nov 04 #PHP
You might like
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
PHP获取指定月份第一天和最后一天的方法
2015/07/18 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
python实现发送邮件及附件功能
2021/03/02 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
高级Java程序员面试要点
2013/08/02 面试题
视光学毕业生自荐书范文
2014/02/13 职场文书
满月酒邀请函
2015/01/30 职场文书
采购员工作总结范文
2015/08/12 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
4种非常实用的python内置数据结构
2021/04/28 Python