先来介绍几个核心函数:

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)
参数   描述
timezone    必需。时区标识符,比如 "UTC" 或 "Europe/Paris"。
合法时区的列表:http://www.php.net/manual/en/timezones.php

实例

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

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

<?php
$startdate=strtotime("2009-9-5");
$enddate=strtotime("2009-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='&nbsp;'.$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."小时";
?>

第五种 mysql 处理日期 (防灌水)

 // $ip = getenv('REMOTE_ADDR');$sql = "SELECT TIME_TO_SEC(NOW())-TIME_TO_SEC(time_at) from test ";//  或者   select   time_to_sec("1980-8-20 12:25:33") - time_to_sec("1997-1-23 6:04:56")

或者用

SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate/*结果:
DiffDate
1
*/

或者

/*
假设我们有如下的表:
OrderId     ProductName     OrderDate
1            'Computer'   2008-12-29 16:25:46.635
*/SELECT OrderId,DATE_ADD(OrderDate,INTERVAL 2 DAY) AS OrderPayDate FROM Orders/*
结果:
OrderId     OrderPayDate
1            2008-12-31 16:25:46.635
*/

详见:http://www.w3school.com.cn/sql/func_date_format.asp

http://www.w3school.com.cn/sql/sql_dates.asp

给出秒算小时 php

<?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
function units($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;
}function stamp($past){date_default_timezone_set("America/New_York"); // 解决php5.1以上时间戳会与实际时间相差8小时,找时区请到http://www.php.net/manual/en/timezones.php$year    =(int)substr($past,0,4); // 取得年份 $month   =(int)substr($past,5,2); // 取得月份$day     =(int)substr($past,8,2); // 取得几号$hour    =(int)substr($past,11,2); // 取得小时$minutes =(int)substr($past,14,2); // 取得分钟$second  =(int)substr($past,17,2); // 取得秒数$past = mktime($hour,$minutes,$second,$month,$day,$year);$now  = time();    $diff = $now - $past;return '发表于' . units($diff) . '前';
}$past = '2009-12-24 16:49:00'; // 从数据库得到日期echo stamp($past);?>

两个日期相差的天数

#方法一:简单方法

$olddate = '2010-02-11'; //如果要用mktime函数,则要用explode拆解日期。
$oldtime = strtotime($olddate);
$passtime = time()-$oldtime; //经过的时间戳。
echo '你在网上泡了'.floor($passtime/(24*60*60)).'天了'.'<br />'; //12天。

#方法二:用减去全年天数的时间戳来获取。

$yDate=1;
$yDate_Y=date('Y',time())-1; //年份-1,即去年
$yDateYMD="$yDate_Y-01-01";
$yYMD=strtotime($yDateYMD); //去年的1月1号时间戳。
$d=date('L',$yYMD)?366:365; //是否是闰年
$yYearTime=$d*24*60*60;$yYear=date('Y-m-d',time()-$yYearTime);
echo "去年的今天:$yYear<br />"; //2009-02-23

#方法三:用直接截取当前日期的年份减一,但不严谨,没有考虑到闰年。

#计算60年前的今天。忽略当中经过的闰年。
$yDate_Y=$yDate_Y-59;
$md=explode('-',date('Y-m-d'));
$yYMD="$yDate_Y-{$md[1]}-{$md[2]}";
echo "60年前的今天:$yYMD <br />"; //1950-02-23

#方法四: 用strtotime()和 GNU日期语法---------推荐!

//3天后; //当前时间为2010-02-23
$d=strtotime('3 days');
echo '3天后'.date('Y-m-d',$d)."<br />";
//3天前:
$d=strtotime('-3 days');
echo '3天前'.date('Y-m-d',$d)."<br />"; //2010-02-20
//一个月前:
$d=strtotime('-1 months');
echo '一个月前'.date('Y-m-d',$d)."<br />"; //2010-01-23//2个月后:
$d=strtotime('2 months');
echo '二个月后'.date('Y-m-d',$d)."<br />"; //2010-04-23//1年前:
$d=strtotime('-1 years');
echo '1年前'.date('Y-m-d',$d)."<br />"; //2009-02-23//2小时前:
$d=strtotime('-2 hours');
echo '目前:'.date('Y-m-d H:i:s',time()).',2小时前'.date('Y-m-d H:i:s',$d)."<br />"; //目前:2010-02-23 13:38:49,2小时前2010-02-23 11:38:49

重设时间

//DateTime构造函数:o bject DateTime([string $time [,dateTimeZone $timezone])
$date = new DateTime('2010-02-23 12:26:36');
echo $date->format('Y-m-d H:i:s')."<br />"; //和date()函数相同。2010-02-23 12:26:36//重设时间:
//1、重设日期: boolean setDate(int year,int month,int day)
//2、重设时间: boolean setDate(int hour,int minute[,int second])
$date->setDate(2010,2,28);
echo $date->format('Y-m-d H:i:s')."<br />"; //2010-02-28 12:26:36//日期计算,相当于上面的strtotime()
$date->modify("+7 hours");
echo $date->format('Y-m-d H:i:s')."<br />"; //2010-02-28 19:26:36
$date->modify("3 days");
echo $date->format('Y-m-d H:i:s')."<br />"; //2010-03-03 19:26:36 //从上面被改过的28号开始/*PHP5在WIN不支持money_format函数?
setlocale(LC_MONETARY,'zh_CN');
echo money_format("%i",786.56);//?Fatal error: Call to undefined function money_format()
*/

php 日期时间运算的小结(计算当前时间之后(之前)的时间)相关推荐

  1. mysql中日期相减_Excel日期和时间运算

    对于Excel的日期和时间运算一般人都很头疼,文章的开始我先给大家说个真理吧,遇到这种问题,不管三七二十一,直接暴力相加或相减,然后把运算结果设置成日期或时间格式,结果也许就有了. 下边我把日期和时间 ...

  2. mysql中的dateDayOfYear_Mysql 常用的时间日期及转换函数小结

    本文主要是总结一些常用的在实际运用中常用的一些mysql时间日期以及转换的函数 1.now()  :返回当前日期和时间 select now(); //2018-04-21 09:19:21 2.cu ...

  3. php计算两个日期之间的小时数,PHP_php 计算两个时间戳相隔的时间的函数(小时),这个是可以具体到小时的php代 - phpStudy...

    php 计算两个时间戳相隔的时间的函数(小时) 这个是可以具体到小时的php代码 复制代码 代码如下: /* Author: 杨宇 yangyu@sina.cn */ //输入两个时间戳,计算差值,也 ...

  4. ios 对日期的处理(包括计算昨天时间、明天时间)

    NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间 Dates NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能.Date对象是不可改变的. 如 ...

  5. oracle 四舍五入日期,Oracle时间运算(日期截取及四舍五入)

    Oracle时间运算(日期截取及四舍五入) 如同对数字进行四舍五入和按位截取一样,Oracle对时间日期也提供了这两种功能.但比起对数字进行四舍五入和截取比较复杂:这是因为时间日期是有格式的.下面看看 ...

  6. python时间计算_python时间运算

    我们用下面的方式来取得当前时间的时间戳: importtimeprinttime.time() 输出的结果是: 1285041535.86 这个结果是1970年到现在时间相隔的秒数 .time.tim ...

  7. SQL基础操作_7_时间运算

    目录 7.8 时间运算 7.8.1 对时间列进行加减 7.8.2 计算两个时间列的差值 7.8.3 计算两个时间列工作日差值 7.8.4 计算时间列所在的周的序号 7.8.5 计算时间列所在年的周序号 ...

  8. oracle日期相减工作日_Oracle 计算两个日期间隔的天数、月数和年数

    在Oracle中计算两个日期间隔的天数.月数和年数: 一.天数: 在Oracle中,两个日期直接相减,便可以得到天数: select to_date('08/06/2015','mm/dd/yyyy' ...

  9. php 获取两个日期相隔几周,怎么样计算2个日期之间相差几周

    你的位置: 问答吧 -> PHP基础 -> 问题详情 怎么样计算2个日期之间相差几周 如题 如果2个日期在同一年中的话可以通过date("W",unix时间戳)来计算 ...

最新文章

  1. java命令执行类,这里设置了classpath,系统变量里的classpath将失效
  2. 2018年跨行学习mysql_2018年,让你的数据库变更快的十个建议
  3. 程学旗 计算机,徐明伟-青年科学家奖-中国计算机学会
  4. php 创建数据库并填充,php操作mysql--连接数据库创建表填充表
  5. 入门机器学习(六)--课后作业解析-logistics回归(python实现)
  6. (转)淘淘商城系列——MyBatis分页插件(PageHelper)的使用以及商品列表展示
  7. Hadoop云计算大数据书籍分享
  8. [转载] python中append和extend函数区别
  9. SNMPv3对安全威胁的分类
  10. C++ 面向对象编程
  11. [ 原创 ] 概念01--中国财政真相:25省负债 全国只有6省1市在赚钱
  12. reviewboard mysql_ReviewBoard安装配置
  13. 大师级游戏建模教程:使用Maya和XGen进行角色制作
  14. selenium+java+chrome环境搭建
  15. 步进电机控制器编程实例C语言,步进电机控制器原理_步进电机控制器编程实例...
  16. Linux笔记 系统安装、网络设置、远程连接、密钥认证、克隆、互联
  17. 计算机tcpip网络原理与应用,清华大学出版社-图书详情-《TCP/IP网络编程原理与技术》...
  18. 内部振荡器、无源晶振、有源晶振有什么区别?
  19. 菜鸟网络业务支撑平台
  20. SQL的数据批量处理

热门文章

  1. 50 MM配置-库存管理和实际库存-自动建立库存地点
  2. python二进制移位_python学习特辑——二进制和位运算篇
  3. python代码颜色搭配_Python IDLE代码配色及语法高亮
  4. PyQT:第一个Demo,画出鼠标单击位置出图像的列像素折线图
  5. Python getattr() 函数==>获取一个对象的属性值
  6. 用于故障诊断的残差收缩网络
  7. 理解CNN中的特征图 feature map
  8. ios开发ocr识别_传统图像处理技术,ocr识别技术算法
  9. python给视频添加声音_python 给视频加入音频
  10. wordpress主题Z-blog拓源纯净版