程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP的日期時間運算總結

PHP的日期時間運算總結

編輯:關於PHP編程

<?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()
*/
?>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved