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