几乎所有从事程序开发的程序员都遇到时间处理问题,PHP开发也一样,幸运的是PHP提供了很多关于日期时间函数。只要经常使用这些函数,搭配使用,日期时间处理上就熟能生巧了。

今天要讲的这个例子,需求是这样的。得知某个日期时间,

如:2012-04-25 10:10:00

我要在这个日期时间的基础上加上5个月并返回处理后的日期

结果:2012-04-25 10:10:00 加5个月等于 2012-09-25 10:10:00

这个需求看似简单,但还是有点棘手,因为PHP没有直接提供yyyy-mm-dd hh:ii:ss 这样格式的日期时间进行加减,所以只能通过时间戳来实现。时间戳是程序换算的标准格式,精确到秒。PHP可以将多种日期格式转换为时间戳,又可以把时间戳 转换回各种日期格式,结合这两个特点我们大致实现的步骤有三步,先把原来时间转换成时间戳,然后进行加减,最后转换回日期格式。

当然,这是实现原理,结合PHP函数date()与strtotime()两个函数来实现大致也是这个意思,请看实例代码

复制代码 代码如下:
<?php
/**
 * PHP里的日期加减方法
 * 琼台老屋
 */
// 第一步,假设有一个时间
$a = '2012-04-25 10:10:00';
 
// 第二步,获得这个日期的时间戳
$a_time = strtotime($a);
 
// 第三步,获得加五个月后的时间戳
$b_time = strtotime('+5 Month',$a_time);
 
// 第四部,把时间戳转换回日期格式
$b = date('Y-m-d H:i:s',$b_time);
echo '这是加了五个月后的日期'.$b;
 
// 如果你觉得以上代码过长也可以一行搞定
$b = date('Y-m-d H:i:s',strtotime('+'.$time.' Month',strtotime($a)));
echo '这是加了五个月后的日期'.$b;
?>

PHP中的日期加减方法示例的更多相关文章

  1. mysql中使用日期加减时无法识别年-月格式数据的问题,%Y-%m"这种格式数据

    最新做报表统计的时候处理按月统计部分时发现,虽然使用 DATE_FORMAT( time, '%Y-%m' ) 函数可以将日期格式转成年-月,但是如果是参数是年-月格式,即"2018-10& ...

  2. Js中处理日期加减天数

    Js的处理日期还是很方便的. 一. 格式化日期为2017-07-04的格式 function formatTime(date) { var year = date.getFullYear(); var ...

  3. Oracle中的日期加减

    加法   select sysdate,add_months(sysdate,12) from dual;        --加1年 select sysdate,add_months(sysdate ...

  4. Delphi中的日期加减

    var Date: TDateTime;  FormatSettings: TFormatSettings; begin Date := Now;//获取当天时间 ShowMessage(DateTo ...

  5. shell 日期加减,日期大小比较的方法

    1 日期加减方法可实现当天的日期加减,指定日期的加减,天周月年. 只判断yymmdd的秒 twoDayAgoTime=`date -d \`date -d "-2 day" +%Y ...

  6. JavaScript日期加减

    JS中的日期加减使用以下方式: varcurrentDate = new Date(); 对日期加减: date.setDate(date.getDate()+n); 对月加减: date.setMo ...

  7. js中两个日期大小比较,获取当前日期,日期加减一天

    一.两个日期大小比较 1.日期参数格式:yyyy-mm-dd // a: 日期a, b: 日期b, flag: 返回的结果 function duibi(a, b,flag) { var arr = ...

  8. 【转载】 C#中日期类型DateTime的日期加减操作

    在C#开发过程中,DateTime数据类型用于表示日期类型,可以通过DateTime.Now获取当前服务器时间,同时日期也可以像数字一样进行加减操作,如AddDay方法可以对日期进行加减几天的操作,A ...

  9. Delphi日期函数、日期加减

    Delphi里有现成的函数可以实现日期加减,是在DateUtils单元里的. function IncYear(const AValue: TDateTime; const ANumberOfYear ...

随机推荐

  1. Android反编译

    反编译(未混淆情况) 1.获取资源文件: 命令行界面apktool.bat d -f  test.apk  fileName  (然而修改后缀名为.zip即可获得): apktool2.0以上版本:a ...

  2. Python的逻辑运算符and小析

    近期突然对验证码的识别感兴趣了,然后就研究了一些图像识别和处理的资料,其中有一种图像处理是关于字体的细化和骨架提取的,但是这种算法没有现成的java代码实现,那些号称的java版代码多半都是效果很差或 ...

  3. 卡拉兹(Callatz)猜想

    题目描述 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步 得到n=1.卡拉兹在195 ...

  4. [转]Ionic – Mobile UI Framework for PhoneGap/Cordova Developers

    本文转自:http://devgirl.org/2014/01/20/ionic-mobile-ui-framework-for-phonegapcordova-developers/ Ionic i ...

  5. Bellman-Ford算法解决单源最短路问题

    #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define max 100 #define I ...

  6. CSS强制性换行word-break与word-wrap的使用

    一般情况下,元素拥有默认的white-space:normal(自动换行,不换行是white-space:nowrap),当录入的文字超过定义的宽度后会自动换行,但当录入的数据是一堆没有空格的字符或字 ...

  7. Java虚拟机详解01----初识JVM

    主要内容如下: JVM的概念 JVM发展历史 JVM种类 Java语言规范 JVM规范 一.JVM的概念: JVM: Java Virtual Machine,意为Java虚拟机. 虚拟机: 指通过软 ...

  8. [C#] 委托之Action和Func区别

    一.说明 一般我们定义委托都是有如下两步: public delegate void MyDelegate(string name);//定义委托 public MyDelegate myDelega ...

  9. java 12 - 5 带有缓冲区的字符流

    字符流为了高效读写,也提供了对应的字符缓冲流. 字符缓冲流:A. BufferedWriter:字符缓冲输出流 B. BufferedReader:字符缓冲输入流 A.BufferedWriter:字 ...

  10. [km] 如何判断一个直播系统是否使用的是RTMP

    如何判断一个直播系统是否使用的是RTMP from: http://peiqiang.net/2016/03/21/how-to-judge-whether-rtmp-is-used-by-a-liv ...