PHP的日期時間運算總結_PHP教程

來源:互聯網
上載者:User
//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()).
;
echo date()函數輸出的.date(Y-m-d H:i:s,time()).
;
//檢查日期:boolean checkdate(int month,int day,int year)
$d=2010-2-31;
echo $d.是.(checkdate(2,31,2010)?有效日期!:無效日期!).
;


//確定當月天數
echo 本月有.date(t,time()).天
; //28天
//確定任意給定的月份的天數
$d=2008-02-01; //閏年,或$d=2008-02;不需要輸入天也可以
$d=strtotime($d);
echo 2008年2月有.date(t,$d).天
; //29天

$d=getdate();
echo

;
print_r($d);
echo
;
/*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).
;
echo strtotime(now).
; // 等於time(),但strtotime使用範圍更靈活,參下文.
echo 測試還原昨天時間:.date(Y-m-d,strtotime($lassdate)).
; //可以把字串型日期轉成時間戳記再用date轉回原格式。
$x=strtotime($lassdate);
$y=mktime(0,0,0,2,22,2010);
echo strtotime()得到的昨天的時間戳記是:.$x.,mktime()得到的昨天時間戳記是:.$y.(($x==$y)?,二者相等:,二者不相同).
; //相等。

#顯示1970年前的日期
$time_int=strtotime(1929-2-10);
echo date("Y-m-d ",$time_int).
; //在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).
; //前天是:2010-02-21

#2、兩個日期相差的天數。
$olddate = 2010-02-11; //如果要用mktime函數,則要用explode拆解日期。
$oldtime = strtotime($olddate);
$passtime = time()-$oldtime; //經過的時間戳記。
echo 你在網上泡了.floor($passtime/(24*60*60)).天了.
; //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
"; //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
"; //1950-02-23

#方法三:用strtotime()和GNU日期文法---------推薦!
//3天后; //目前時間為2010-02-23
$d=strtotime(3 days);
echo 3天后.date(Y-m-d,$d)."
";
//3天前:
$d=strtotime(-3 days);
echo 3天前.date(Y-m-d,$d)."
"; //2010-02-20
//一個月前:
$d=strtotime(-1 months);
echo 一個月前.date(Y-m-d,$d)."
"; //2010-01-23

//2個月後:
$d=strtotime(2 months);
echo 二個月後.date(Y-m-d,$d)."
"; //2010-04-23

//1年前:
$d=strtotime(-1 years);
echo 1年前.date(Y-m-d,$d)."
"; //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)."
"; //目前: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)."
"; //和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)."
"; //2010-02-28 12:26:36
//日期計算,相當於上面的strtotime()
$date->modify("+7 hours");
echo $date->format(Y-m-d H:i:s)."
"; //2010-02-28 19:26:36
$date->modify("3 days");
echo $date->format(Y-m-d H:i:s)."
"; //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()
*/
?>

http://www.bkjia.com/PHPjc/508431.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/508431.htmlTechArticle?php //GB2312的Encode header(Cache-Control: no-store, no-cache, must-revalidate); header(Cache-Control: post-check=0, pre-check=0, false); /*重點瞭解strtotime()函數 1、strf...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.