非常全面的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 相关文章推荐
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 PHP
require(),include(),require_once()和include_once()区别
Mar 27 PHP
PHP 程序授权验证开发思路
Jul 09 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
Nov 19 PHP
PHP简单选择排序算法实例
Jan 26 PHP
10条php编程小技巧
Jul 07 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
php文件上传你必须知道的几点
Oct 20 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
php 验证码制作(网树注释思想)
2009/07/20 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php查询ip所在地的方法
2014/12/05 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
2019/04/17 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
JavaScript如何操作css
2020/10/24 Javascript
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
Python Collatz序列实现过程解析
2019/10/12 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
奥利奥广告词
2014/03/20 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript