• 沙里软件

  • ShaliSoft.com [手机站]   办公桌收纳抽屉
  • 首页
  • 博文
  • 演示
  • 管理
  • PHP的日期时间运算总结

    网络   2013/9/24 12:01:48

    <?php

    //GB2312的Encode

    header("Cache-Control: no-store, no-cache, must-revalidate");

    header("Cache-Control: post-check=0, pre-check=0", false);


    /*重点了解strtotime()函数

    1、strftime比time()好用,可以直接把常用的’2010-02-03‘转成时间戳。

    2、date()可以显示1970年前的时间。而不必用负数做参数2

    3、日期计算可以用时间戳来中转。计算两个日期相差的天数,可以取得相差的时间戳后除以“24小时*60分*60”秒来得到,但用strtotime()更简洁、

    4、了解用PEAR创建日历。这里略去。

    知识点:网络上有关于date('Y-m-d',-800)来计算1970年前的时间,但WINDOW系统不支持负值,因此总会返回1970-1-1子夜。

    */


    #PHP5必须先设置默认区。

    date_default_timezone_set('ETC/GMT-8');

    $nowdate='2010-02-23';

    $lassdate = '2010-02-22';


    echo 'strftime()函数输出的'.strftime('%Y-%m-%d %H:%M:%S',time()).'<br />';

    echo 'date()函数输出的'.date('Y-m-d H:i:s',time()).'<br />';

    //检查日期:boolean checkdate(int month,int day,int year)

    $d='2010-2-31';

    echo $d.'是'.(checkdate(2,31,2010)?'有效日期!':'无效日期!').'<br />';



    //确定当月天数

    echo '本月有'.date('t',time()).'天<br />'; //28天

    //确定任意给定的月份的天数

    $d='2008-02-01'; //闰年,或$d='2008-02';不需要输入天也可以

    $d=strtotime($d);

    echo '2008年2月有'.date('t',$d).'天<br />'; //29天


    $d=getdate();

    echo '<pre>';

    print_r($d);

    echo '</pre>';

    /*Array(

       [seconds] => 42

       [minutes] => 16

       [hours] => 13

       [mday] => 23

       [wday] => 2

       [mon] => 2

       [year] => 2010

       [yday] => 53

       [weekday] => Tuesday

       [month] => February

       [0] => 1266902202

    )

    */


    //echo date("Y-m-d H:i:s",-8000);

    //setlocale(LC_ALL,'zh_CN.gb2312'); //setlocale函数对下面的没有影响。

    #测试strftime,mktime函数。

    echo strftime('今天是:%Y-%m-%d %H:%M:%S').'<br />';

    echo strtotime('now').'<br />'; // 等于time(),但strtotime使用范围更灵活,参下文.

    echo '测试还原昨天时间:'.date('Y-m-d',strtotime($lassdate)).'<br />'; //可以把字串型日期转成时间戳再用date转回原格式。

    $x=strtotime($lassdate);

    $y=mktime(0,0,0,'2','22','2010');

    echo 'strtotime()得到的昨天的时间戳是:'.$x.',mktime()得到的昨天时间戳是:'.$y.(($x==$y)?',二者相等':',二者不相同').'<br />'; //相等。


    #显示1970年前的日期

    $time_int=strtotime('1929-2-10');

    echo date("Y-m-d ",$time_int).'<br />'; //在MYSQL中与date()函数相同功能的是date_format('1996-02-05 11:07:45','%Y-%m-%d')或for_format()


    /*时间运算:

    *请使用方法三。其它方法只供参考。 *

    */

    #1、今天是23号,获得前天的时间,即减两天。

    $predate=2;

    $pretime=$predate*24*60*60; //2天的时间戳。

    echo date('前天是:Y-m-d',time()-$pretime).'<br />';    //前天是:2010-02-21


    #2、两个日期相差的天数。

    $olddate = '2010-02-11'; //如果要用mktime函数,则要用explode拆解日期。

    $oldtime = strtotime($olddate);

    $passtime = time()-$oldtime; //经过的时间戳。

    echo '你在网上泡了'.floor($passtime/(24*60*60)).'天了'.'<br />'; //12天。


    #3、去年这个时侯。使用时要考虑闰年:平年365天,闰年366天。

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

    $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构造函数:object 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()

    */

    ?>


    阅读(6149) 分享(0)

    上一篇: 优化PHP代码,使php更高效
    下一篇: PHP:$_SERVER中,QUERY_STRING、REQUEST_URI、SCRIPT_NAME与PHP_SELF四个变量的区别

  • 精彩推荐

    ◆ 导出Excel 格式 mso-number-format
    ◆ JS 银行卡号判断验证
    ◆ StackOverflow网站架构,.NET技术架构解析
    ◆ 移动设备屏幕适配,字体px pt dp的区别?
    ◆ 怎么防止数据库被下载密码不被泄露
    ◆ 58同城沈剑:好的架构是进化来的,不是设计来的
    ◆ 关闭vs2010的托盘提示 "Improve Microsoft Visual Studio performance"
    ◆ CIH病毒作者陈盈豪现状
    ◆ PHP利用mysqli操作数据库方法总结
    ◆ 马云、马化腾、刘强东的童年大揭底!
  • 用心做事 不能唯利是图

    • 吊儿
    • 用QQ联系我17905772
  • 搜索


  • 最新文章

    • 导出Excel 格式 mso-number-format
    • 服务器iis支持tls1.2,windows server 2008 r2 中IIS启用TLS 1.2(安装SSL后用TLS 1.2)
    • MySQL配置优化
    • EditPlus 添加文件比较工具winmerge
    • 滚动悬浮固定JS特效

  • 热门文章

    • php sso单点登录实现代码
    • 中国菜刀(China chopper) 最新黑客工具
    • redis.conf中文版(基于2.4)
    • 搜索引擎名单大全
    • php图片上传类,支持加水印,生成略缩图

  • 最新图库


  • 最新评论


  • 友情链接

  • 沙里软件

  • 最近访客

    Powered by ShaliSoft.com 豫ICP备13008529号

    免责声明:本站部分内容来源于互联网,转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责,也不构成任何其他建议。如果发现侵犯版权,联系QQ17905772进行删除。