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

实例讲解之前,先来介绍几个核心函数: 
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日期时间运算全部实例,希望对大家的学习有所帮助。

(0)

相关推荐

  • PHP中时间加减函数strtotime用法分析

    本文实例讲述了PHP中时间加减函数strtotime用法.分享给大家供大家参考,具体如下: 时间加减 <?php //获取本地 提取年份+1 $date=date("Y-m-d",mktime(0,0,0,date("m") ,date("d"),date("Y")+1)); ?> 如果要获取数据库中的时间应该如何处理呢?在PHP文档中找到了一个很好的函数strtotime,可以对时间进行加减: int strto

  • PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】

    本文实例讲述了PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算方法.分享给大家供大家参考,具体如下: 其实就是strtotime这个内置函数 //PHP 日期 加减 周 date("Y-m-d",strtotime("2013-11-12 +1 week")) //PHP 日期 加减 天数 date("Y-m-d",strtotime("2013-11-12 12:12:12 +1 day")) //PHP 日期

  • PHP使用strtotime获取上个月、下个月、本月的日期

    今天写程序的时候,突然发现了很早以前写的获取月份天数的函数,经典的switch版,但是获得上月天数的时候,我只是把月份-1了,估计当时太困了吧,再看到有种毛骨悚然的感觉,本来是想再处理一下的,但是一想肯定还有什么超方便的方法,于是找到了下面这个版本,做了一点小修改. 获取本月日期: function getMonth($date){ $firstday = date("Y-m-01",strtotime($date)); $lastday = date("Y-m-d"

  • php 深入理解strtotime函数的使用详解

    在前面的<如何使用PHP计算上一个月的今天>一文中, 我们提到strtotime函数在使用strtotime("-1 month")求上一个月的今天时会出一些状况,因此也引出写这篇文章,本文包括如下内容:•strtotime函数的一些用法•strtotime函数的实现基本原理•strtotime("-1 month")求值失败的原因strtotime函数的一些用法1. strtotime("JAN")和strtotime("

  • PHP时间戳 strtotime()使用方法和技巧

    在php中我想要获取时间戳有多种方法,最常用的就是使用time函数与strtotime()函数把日期转换成时间戳了,下面我来给大家分享一下时间戳函数 strtotime用法.获取指定的年月日转化为时间戳:pHP时间戳函数获取指定日期的unix时间戳 strtotime('2012-12-7')示例如下: 复制代码 代码如下: <?php     echo strtotime('2012-12-7'); //结果:1354838400 ?> 说明:返回2012年12月7日0点0分0秒时间戳. 将

  • PHP使用strtotime计算两个给定日期之间天数的方法

    本文实例讲述了PHP使用strtotime计算两个给定日期之间天数的方法.分享给大家供大家参考.具体分析如下: PHP的strtotime函数用于将任何英文文本的日期时间描述解析为Unix时间戳.这个函数将使用TZ环境变量(如果有的话)来计算时间戳.如果执行成功它返回一个时间戳,否则返回FALSE.在PHP 5.1.0之前,这个函数将返回-1. $date1 = date('Y-m-d'); $date2 = '2005-03-01′; $days = (strtotime() – strtot

  • PHP正则匹配日期和时间(时间戳转换)的实例代码

    先来一个比较简单实用的代码 日期YYYY-MM-DD $str = ''; $isMatched = preg_match('/^\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}$/', $str, $matches); var_dump($isMatched, $matches); php需要一定的时间格式才能转换成时间戳(表示从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数),这就要用到php正则判断,以下是代码: <?php //匹配时间格式为2016-0

  • php 时间time与日期date之间的使用详解及区别

    php时间time与日期date之间的使用区别 1.time()函数 PHP中的time()函数,使用echo输出来看是一个很长的整数,里面包含了日期和时间,是计算后的一个值.如果要得到Y-m-d H:i:s这样的日期格式,那么可以使用date方法: date('Y-m-d H:i:s', time()); echo输出它即可得到:2016-1-5 10:20:11 2.日期格式与字符串 我们自己可以构建一个日期格式的字符串,如:2015-1-1 10:20:11.可以使用strtotime()

  • PHP strtotime函数详解

    先看手册介绍: strtotime - 将任何英文文本的日期时间描述解析为 Unix 时间戳 格式:int strtotime ( string $time [, int $now ] ) 本函数预期接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数),其值相对于 now 参数给出的时间,如果没有提供此参数则用系统当前时间. 本函数将使用 TZ 环境变量(如果有的话)来计算时间戳.自 PHP 5.1.0 起

  • php使用date和strtotime函数输出指定日期的方法

    本文实例讲述了php使用date和strtotime函数输出指定日期的方法.分享给大家供大家参考.具体方法分析如下: 在php中date和strtotime函数都是对日期操作的,但是在生成上面date和strtotime是不一样的,一个是数字日期一个是 Unix 时间戳了,但我们都可以生成相同的日期,下面来看两个函数的例子. php中经常会用到date函数和strtotime函数,这2个函数大家一定并不陌生,今天和大家分享下使用技巧. strtotime - 将任何英文文本的日期时间描述解析为

  • PHP中strtotime函数使用方法详解

    在PHP中有个叫做strtotime的函数.strtotime 实现功能:获取某个日期的时间戳,或获取某个时间的时间戳.strtotime 将任何英文文本的日期时间描述解析为Unix时间戳[将系统时间转化成unix时间戳] 一,获取指定日期的unix时间戳 strtotime("2009-1-22") 示例如下: 1.echo strtotime("2009-1-22") 结果:1232553600 说明:返回2009年1月22日0点0分0秒时间戳 二,获取英文文本

  • PHP下获取上个月、下个月、本月的日期(strtotime,date)

    今天写程序的时候,突然发现了很早以前写的获取月份天数的函数,经典的switch版,但是获得上月天数的时候,我只是把月份-1了,估计当时太困了吧,再看到有种毛骨悚然的感觉,本来是想再处理一下的,但是一想肯定还有什么超方便的方法,于是找到了下面这个版本,做了一点小修改. 获取本月日期: 复制代码 代码如下: function getMonth($date){     $firstday = date("Y-m-01",strtotime($date));     $lastday = da

  • php使用strtotime和date函数判断日期是否有效代码分享

    咋一想,判断日期是否有效应该是蛮简单的一个功能,但是细想起来还是有点麻烦的,因为既要检验格式,又要检验有效性.例如2013-02-29,虽然格式正确,但是日期无效:而2012-02-29格式正确,也有效. 一种方法可以使用正则,但是正则其实理解起来蛮麻烦的,而且使用正则在检验有效性方面也不太好.这里提供一个方法,主要是使用strtotime和date函数进行检验.直接上函数: 复制代码 代码如下: /** * 校验日期格式是否正确 *  * @param string $date 日期 * @p

随机推荐