PHP的日期时间运算总结<br /> &lt;?php<br /> //GB2312的Encode<br /> header(&quot;Cache-Control: no-store, no-cache, must-revalidate&quot;);<br /> header(&quot;Cache-Control: post-check=0, pre-check=0&quot;, false);<br /> <br /> /*重点了解strtotime()函数<br /> 1、strftime比time()好用,可以直接把常用的’2010-02-03‘转成时间戳。<br /> 2、date()可以显示1970年前的时间。而不必用负数做参数2<br /> 3、日期计算可以用时间戳来中转。计算两个日期相差的天数,可以取得相差的时间戳后除以“24小时*60分*60”秒来得到,但用strtotime()更简洁、<br /> 4、了解用PEAR创建日历。这里略去。<br /> 知识点:网络上有关于date('Y-m-d',-800)来计算1970年前的时间,但WINDOW系统不支持负值,因此总会返回1970-1-1子夜。<br /> */<br /> <br /> #PHP5必须先设置默认区。<br /> date_default_timezone_set('ETC/GMT-8');<br /> $nowdate='2010-02-23';<br /> $lassdate = '2010-02-22';<br /> <br /> echo 'strftime()函数输出的'.strftime('%Y-%m-%d %H:%M:%S',time()).'&lt;br /&gt;';<br /> echo 'date()函数输出的'.date('Y-m-d H:i:s',time()).'&lt;br /&gt;';<br /> //检查日期:boolean checkdate(int month,int day,int year)<br /> $d='2010-2-31';<br /> echo $d.'是'.(checkdate(2,31,2010)?'有效日期!':'无效日期!').'&lt;br /&gt;';<br /> <br /> <br /> //确定当月天数<br /> echo '本月有'.date('t',time()).'天&lt;br /&gt;'; //28天<br /> //确定任意给定的月份的天数<br /> $d='2008-02-01'; //闰年,或$d='2008-02';不需要输入天也可以<br /> $d=strtotime($d);<br /> echo '2008年2月有'.date('t',$d).'天&lt;br /&gt;'; //29天<br /> <br /> $d=getdate();<br /> echo '&lt;pre&gt;';<br /> print_r($d);<br /> echo '&lt;/pre&gt;';<br /> /*Array(<br /> [seconds] =&gt; 42<br /> [minutes] =&gt; 16<br /> [hours] =&gt; 13<br /> [mday] =&gt; 23<br /> [wday] =&gt; 2<br /> [mon] =&gt; 2<br /> [year] =&gt; 2010<br /> [yday] =&gt; 53<br /> [weekday] =&gt; Tuesday<br /> [month] =&gt; February<br /> [0] =&gt; 1266902202<br /> )<br /> */<br /> <br /> //echo date(&quot;Y-m-d H:i:s&quot;,-8000);<br /> //setlocale(LC_ALL,'zh_CN.gb2312'); //setlocale函数对下面的没有影响。<br /> #测试strftime,mktime函数。<br /> echo strftime('今天是:%Y-%m-%d %H:%M:%S').'&lt;br /&gt;';<br /> echo strtotime('now').'&lt;br /&gt;'; // 等于time(),但strtotime使用范围更灵活,参下文.<br /> echo '测试还原昨天时间:'.date('Y-m-d',strtotime($lassdate)).'&lt;br /&gt;'; //可以把字串型日期转成时间戳再用date转回原格式。<br /> $x=strtotime($lassdate);<br /> $y=mktime(0,0,0,'2','22','2010');<br /> echo 'strtotime()得到的昨天的时间戳是:'.$x.',mktime()得到的昨天时间戳是:'.$y.(($x==$y)?',二者相等':',二者不相同').'&lt;br /&gt;'; //相等。<br /> <br /> #显示1970年前的日期<br /> $time_int=strtotime('1929-2-10');<br /> echo date(&quot;Y-m-d &quot;,$time_int).'&lt;br /&gt;'; //在MYSQL中与date()函数相同功能的是date_format('1996-02-05 11:07:45','%Y-%m-%d')或for_format()<br /> <br /> /*时间运算:<br /> *请使用方法三。其它方法只供参考。 *<br /> */<br /> #1、今天是23号,获得前天的时间,即减两天。<br /> $predate=2;<br /> $pretime=$predate*24*60*60; //2天的时间戳。<br /> echo date('前天是:Y-m-d',time()-$pretime).'&lt;br /&gt;'; //前天是:2010-02-21<br /> <br /> #2、两个日期相差的天数。<br /> $olddate = '2010-02-11'; //如果要用mktime函数,则要用explode拆解日期。<br /> $oldtime = strtotime($olddate);<br /> $passtime = time()-$oldtime; //经过的时间戳。<br /> echo '你在网上泡了'.floor($passtime/(24*60*60)).'天了'.'&lt;br /&gt;'; //12天。<br /> <br /> #3、去年这个时侯。使用时要考虑闰年:平年365天,闰年366天。<br /> #方法一:用减去全年天数的时间戳来获取。<br /> $yDate=1;<br /> $yDate_Y=date('Y',time())-1; //年份-1,即去年<br /> $yDateYMD=&quot;$yDate_Y-01-01&quot;;<br /> $yYMD=strtotime($yDateYMD); //去年的1月1号时间戳。<br /> $d=date('L',$yYMD)?366:365; //是否是闰年<br /> $yYearTime=$d*24*60*60;<br /> <br /> $yYear=date('Y-m-d',time()-$yYearTime);<br /> echo &quot;去年的今天:$yYear&lt;br /&gt;&quot;; //2009-02-23<br /> #方法二:用直接截取当前日期的年份减一,但不严谨,没有考虑到闰年。<br /> #计算60年前的今天。忽略当中经过的闰年。<br /> $yDate_Y=$yDate_Y-59;<br /> $md=explode('-',date('Y-m-d'));<br /> $yYMD=&quot;$yDate_Y-{$md[1]}-{$md[2]}&quot;;<br /> echo &quot;60年前的今天:$yYMD &lt;br /&gt;&quot;; //1950-02-23<br /> <br /> #方法三:用strtotime()和GNU日期语法---------推荐!<br /> //3天后; //当前时间为2010-02-23<br /> $d=strtotime('3 days');<br /> echo '3天后'.date('Y-m-d',$d).&quot;&lt;br /&gt;&quot;;<br /> //3天前:<br /> $d=strtotime('-3 days');<br /> echo '3天前'.date('Y-m-d',$d).&quot;&lt;br /&gt;&quot;; //2010-02-20<br /> //一个月前:<br /> $d=strtotime('-1 months');<br /> echo '一个月前'.date('Y-m-d',$d).&quot;&lt;br /&gt;&quot;; //2010-01-23<br /> <br /> //2个月后:<br /> $d=strtotime('2 months');<br /> echo '二个月后'.date('Y-m-d',$d).&quot;&lt;br /&gt;&quot;; //2010-04-23<br /> <br /> //1年前:<br /> $d=strtotime('-1 years');<br /> echo '1年前'.date('Y-m-d',$d).&quot;&lt;br /&gt;&quot;; //2009-02-23<br /> <br /> //2小时前:<br /> $d=strtotime('-2 hours');<br /> echo '目前:'.date('Y-m-d H:i:s',time()).',2小时前'.date('Y-m-d H:i:s',$d).&quot;&lt;br /&gt;&quot;; //目前:2010-02-23 13:38:49,2小时前2010-02-23 11:38:49<br /> <br /> #DateTime构造函数:object DateTime([string $time [,dateTimeZone $timezone])<br /> $date = new DateTime('2010-02-23 12:26:36');<br /> echo $date-&gt;format('Y-m-d H:i:s').&quot;&lt;br /&gt;&quot;; //和date()函数相同。2010-02-23 12:26:36<br /> //重设时间:<br /> //1、重设日期: boolean setDate(int year,int month,int day)<br /> //2、重设时间: boolean setDate(int hour,int minute[,int second])<br /> $date-&gt;setDate(2010,2,28);<br /> echo $date-&gt;format('Y-m-d H:i:s').&quot;&lt;br /&gt;&quot;; //2010-02-28 12:26:36<br /> //日期计算,相当于上面的strtotime()<br /> $date-&gt;modify(&quot;+7 hours&quot;);<br /> echo $date-&gt;format('Y-m-d H:i:s').&quot;&lt;br /&gt;&quot;; //2010-02-28 19:26:36<br /> $date-&gt;modify(&quot;3 days&quot;);<br /> echo $date-&gt;format('Y-m-d H:i:s').&quot;&lt;br /&gt;&quot;; //2010-03-03 19:26:36 //从上面被改过的28号开始<br /> <br /> /*PHP5在WIN不支持money_format函数?<br /> setlocale(LC_MONETARY,'zh_CN');<br /> echo money_format(&quot;%i&quot;,786.56);//?Fatal error: Call to undefined function money_format()<br /> */<br /> ?&gt;<br /> <br />
T:0.006396s,M:211.54 KB
返回顶部 留言