亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP日期處理函數(shù) 整型日期格式

 更新時間:2011年01月12日 16:17:03   作者:  
我正打算用PHP編寫一種幫助處理系統(tǒng)。我發(fā)現(xiàn)我必須知道處理完最后一位客戶的問題后已經過去了多長時間?
當我過去用ASP時解決這個問題相當簡單,ASP有相應的函數(shù)DateDiff可以給出兩個日期間間隔多少月、多少天和多少秒。當我搜尋完PHP手冊后我發(fā)現(xiàn)PHP并沒有類似的函數(shù)。
本文包含以下內容:
1、 得到目前的日期和時間-我們有多少種方式?
2、 改變日期顯示的方式-日期和時間的顯示形式
3、 轉換現(xiàn)在的日期為Unix的時間戳值
4、 改變日期
a. 增加時間
b. 減去時間
c. 找出兩日期之間的間隔
5、 為PHP添加DateAdd函數(shù)
6、 為PHP添加DateDiff函數(shù)
**得到目前的日期和時間
在Unix中,時間的表示方式為計算從1970年1月1日零時起所過去的秒數(shù),這稱為UNIX 時間戳(Unix Epoch)。
如果我們有這樣一段的代碼:
復制代碼 代碼如下:

<?
echo time();
?>;

將返回值958905820
而此時的時間為2000年5月21日12時43分。
你也許會說這相當不錯。當這對我毫無幫助,或者只有一點幫助。在PHP中,對日期處理的函數(shù)都必須用到由time()返回的時間戳值。同時,由于PHP在Unix和Windows系統(tǒng)中均使用同樣的時間戳值,這就允許你不需要修改代碼即可在不同的系統(tǒng)間移植。另外的一個好處是time()函數(shù)返回的是一個整數(shù),你可以將其作為整數(shù)字段或文本字段存入數(shù)據(jù)庫,而不必使用特別的日期/時間字段。
你已經基本了解了Unix的時間戳值,現(xiàn)在讓我們來展示它的實際用途。
改變日期顯示的方式-日期和時間的顯示形式
PHP提供兩個辦法來將Unix的時間戳值轉換成為有用的數(shù)據(jù)。第一個是date()函數(shù)。這個函數(shù)有兩個參數(shù)-第一個字符串用于設定你所希望返回的格式,第二個為Unix的時間戳值。
格式化字符串通過一些簡單的特殊格式化字符來顯示你所希望看到的格式的日期和時間。假設你希望日期以這樣的格式顯示“18h01 Sunday 21 May”。
我們需要對字符串中的每一部分使用一個特殊格式化字符,你可以從PHP手冊中日期和時間函數(shù)庫中找到。這樣的特殊格式化字符數(shù)量不少,他們所表示的類似于星期幾、月的英文名、用2位或4位數(shù)表示的年份,是否是上午(AM)或下午(PM)以及其他。對于這個例子我們需要的特殊字符為:
‘H' -24 小時制的小時
‘i'- 分鐘
‘l'- 星期幾的英文全名
‘d'- 本月的第幾日
‘F'- 月份的英文全名
因此我們的格式化字符串為”Hhi l d F”, PHP代碼為:
復制代碼 代碼如下:

<?
echo date ("Hhi l d F" ,time());
?>;

當我們執(zhí)行這段代碼,我們發(fā)現(xiàn)我們所得到的結果為:
180609 Sunday 21 May
這樣的結果看起來有些奇怪。讓我們再查一下PHP手冊,原來'h'所代表的是12 小時制的小時數(shù)。這再次證明了一句真理:“計算機只做你所告訴它該做的,而不是你想要它做的”。我們有兩個選擇。第一個是在h前使用轉義字符“\”:
echo date ("H\hi l d F", time());
我們得到這樣的結果:
18h12 Sunday 21 May
這正是我們所要的。但如果我們在一個十分復雜的句子中需要包含日期和時間,我們是否需要對每個字符使用轉義字符?
答案當然是不。我們使用另一個函數(shù)strftime()。
strftime()有兩個好處。
第一個好處我們并不在本文討論范圍內-如果你使用setlocale()函數(shù),你可以通過strftime得到相應語言的月份的名稱。
另外的一個好處是你可以將特別的日期和時間的格式化字符包含在你的字符串中。這同時也意味著無論你是否要學習date()函數(shù)的所有特殊格式化字符,你都必須學習一整套完全不同的格式化字符。
strftime()工作的方式和date()沒有什么不同,除了特殊格式化字符的前面必須添加一個百分號%。如果用strftime()函數(shù),前面例子的代碼如下:
復制代碼 代碼如下:

<?
echo strftime ("%Hh%M %A %d %b" ,time());
?>;

結果為:
18h24 Sunday 21 May
這也許看起來將簡化繁,但考慮一下如果你所需要的顯示的為
"Today is Sunday 21 May 2000. The time is somewhere close to 18h24."
我想使用date()函數(shù)無疑令人感到厭煩。
在開始的時候,我提及我們有兩種方式可以從Unix時間戳值中得到有用的數(shù)據(jù)。我們剛剛了解了date()和strftime()。另一個getdate()。這個函數(shù)只需要Unix 的時間戳值作為參數(shù),而函數(shù)的返回值為日期和時間的數(shù)組。
下面是一個例子:
復制代碼 代碼如下:

<?
$date_time_array = getdate (time());
echo $date_time_array[ "weekday"];
?>;

返回的結果為:
Sunday
除了"weekday",該數(shù)組的其他部分為:
"seconds" –秒
"minutes" –分
"hours" –小時
“mday" - 本月的第幾天
"wday" -本周的第幾天(數(shù)字)
"mon" -月(數(shù)字)
"year" –年
"yday" - r本年的第幾天(數(shù)字)
"month" -月份全名
我們現(xiàn)在可以得到容易辨認的日期和時間。那么其他呢?
**轉換現(xiàn)在的日期為Unix的時間戳值
通常你必須處理一些日期或時間格式的數(shù)據(jù)。打開M$的一個Access數(shù)據(jù)庫,所有的日期都以YYYY/MM/DD的格式存儲,加入目前的日前即為2000/05/27。Mktime()函數(shù)可以將一個時間轉換成Unix的時間戳值。
函數(shù)的格式為:int mktime(int hour, int minute, int second, int month, int day, int year, int [is_dst] );
從左往右你必須提供小時、分、秒、月、天和年。最后一個參數(shù)用于指定你是否處于夏令時,此參數(shù)是可選的,所以我們將忽略它。
代碼如下:
復制代碼 代碼如下:

<?
echo mktime (0, 0,0 ,5, 27,2000 );
?>;

由于不知道小時、分和秒同時這些參數(shù)必須填寫,我將其設置為0。設置為0意味著時間為午夜。
復制代碼 代碼如下:

<?
$access_date = "2000/05/27";
//explode()函數(shù)用一個字符串作為分界來分解另一個字符串。這個例子$access_date通過字符串”/”來分解
$date_elements = explode("/" ,$access_date);
// 此時
// $date_elements[0] = 2000
// $date_elements[1] = 5
// $date_elements[2] = 27
echo mktime (0, 0,0 ,$date_elements [1], $date_elements[ 2],$date_elements [0]);
?>;

我們看一個比從Access數(shù)據(jù)庫單純獲得日期更復雜的情況,我們得到一個以下格式的日期和時間:2000/05/27 02:40:21 PM
復制代碼 代碼如下:

<?
// 來自Access的字符串
$date_time_string = "2000/05/27 02:40:21 PM";
// 將字符串分解成3部分-日期、時間和上午/下午
$dt_elements = explode(" " ,$date_time_string);
// 分解日期
$date_elements = explode("/" ,$dt_elements[ 0]);
// 分解時間
$time_elements = explode(":" ,$dt_elements[ 1]);
// 如果是下午,我們將時間增加12小時以便得到24小時制的時間
if ($dt_elements [2]== "PM") { $time_elements[ 0]+=12;}
// 輸出結果
echo mktime ($time_elements [0], $time_elements[ 1], $time_elements[ 2], $date_elements[1], $date_elements[2], $date_elements[0]);
?>;

**修改日期
有時我們需要知道6小時以后是什么時間,35天前的日期或者從你最后一次玩Quake3后已過去多少秒。我們已經知道如何用mktime()函數(shù)從單獨的日期和時間中獲得Unix的時間戳值。如果我們需要的并非目前日期和時間的Unix時間戳值,我們該咋辦?下面是一些練習可以幫助說明我們后面所要做的。
正如前面所見,mktime()使用以下參數(shù):小時、分、秒、月、天和年。想想第二節(jié),getdate()函數(shù)可以為我們獲得這些參數(shù)。
復制代碼 代碼如下:

<?
// 將目前的時間戳值放入一數(shù)組內
$timestamp = time();
echo $timestamp;
echo "p";
$date_time_array = getdate( $timestamp);
// 用mktime()函數(shù)重新產生Unix時間戳值
$timestamp = mktime($date_time_array ["hours"], $date_time_array["minutes" ],$date_time_array[ "seconds"],$date_time_array ["mon"], $date_time_array["mday" ],$date_time_array[ "year"]);
echo $timestamp;
?>;

看起來有一些令人感到迷惑。我將用一些變量來使上面的程序看起來更容易了解。
復制代碼 代碼如下:

<?
// 將目前的時間戳值放入一數(shù)組內
$timestamp = time();
echo $timestamp;
echo "p";
$date_time_array = getdate( $timestamp);
$hours = $date_time_array[ "hours"];
$minutes = $date_time_array["minutes"];
$seconds = $date_time_array[ "seconds"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["year"];
// 用mktime()函數(shù)重新產生Unix時間戳值
$timestamp = mktime($hours ,$minutes, $seconds,$month ,$day,$year);
echo $timestamp;
?>;

現(xiàn)在我們將由getdate()所產生的時間戳值放入相對應的名稱變量中,所以代碼變得相對容易閱讀和理解?,F(xiàn)在如果我們需要在目前的時間上加上19個小時,我們用$hours+19代替mktime()函數(shù)中的$hours。mktime()將自動為我們將時間轉到第二天。
復制代碼 代碼如下:

<?
// 將目前的時間戳值放入一數(shù)組內
$timestamp = time();
echo strftime( "%Hh%M %A %d %b",$timestamp);
echo "p";
$date_time_array = getdate($timestamp);
$hours = $date_time_array["hours"];
$minutes = $date_time_array["minutes"];
$seconds = $date_time_array["seconds"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["year"];
// 用mktime()函數(shù)重新產生Unix時間戳值
// 增加19小時
$timestamp = mktime($hours + 19, $minutes,$seconds ,$month, $day,$year);
echo strftime( "%Hh%M %A %d %b",$timestamp);
echo "br~E after adding 19 hours";
?>;

運行后得到:
14h58 Saturday 03 Jun
09h58 Sunday 04 Jun
~E after adding 19 hours
減少時間也是同樣的-你只需要減少相應變量的值即可。
得到兩個不同時間值的差同樣也是非常簡單。你所需要做的只是將兩個時間值轉換為Unix的時間戳值,然后兩者相減即可。兩者之差即為兩個時間所相隔的秒數(shù)。另外一些算法可以很快地將秒轉為天、小時、分和秒。
**為PHP添加DateAdd函數(shù)
正如在文章一開始我所說的-寫本文的原因是因為我在PHP中找不到類似ASP的DateDiff函數(shù)。在介紹完PHP是如何處理日期和時間,讓我們將ASP中常用的兩個函數(shù)移植到PHP。第一個函數(shù)是DateAdd。
根據(jù)Vbscript的文檔,DateAdd(interval,number,date)函數(shù)的定義為“返回已添加指定時間間隔的日期?!?
Inetrval為表示要添加的時間間隔字符串表達式,例如分或天;number為表示要添加的時間間隔的個數(shù)的數(shù)值表達式;Date表示日期。
Interval(時間間隔字符串表達式)可以是以下任意值:
yyyy year年
q Quarter季度
m Month月
y Day of year一年的數(shù)
d Day天
w Weekday一周的天數(shù)
ww Week of year周
h Hour小時
n Minute分
s Second秒
w、y和d的作用是完全一樣的,即在目前的日期上加一天,q加3個月,ww加7天。
復制代碼 代碼如下:

<?
function DateAdd ($interval, $number, $date) {
$date_time_array = getdate($date);
$hours = $date_time_array["hours"];
$minutes = $date_time_array["minutes"];
$seconds = $date_time_array["seconds"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["year"];
switch ($interval) {
case "yyyy": $year +=$number; break;
case "q": $month +=($number*3); break;
case "m": $month +=$number; break;
case "y":
case "d":
case "w": $day+=$number; break;
case "ww": $day+=($number*7); break;
case "h": $hours+=$number; break;
case "n": $minutes+=$number; break;
case "s": $seconds+=$number; break;
}
$timestamp = mktime($hours ,$minutes, $seconds,$month ,$day, $year);
return $timestamp;}
?>;

我們可以將上面的代碼保存為dateadd.inc文件,然后運行以下代碼:
復制代碼 代碼如下:

<?
include('dateadd.inc');
$temptime = time();
echo strftime( "%Hh%M %A %d %b",$temptime);
$temptime = DateAdd("n" ,50,$temptime);
echo "p";
echo strftime( "%Hh%M %A %d %b",$temptime);
?>;

我們將得到:
15h41 Saturday 03 Jun
16h31 Saturday 03 Jun
為PHP添加DateDiff函數(shù)
現(xiàn)在DateAdd已經完成,那么DateDiff呢?
根據(jù)文檔,DateDiff(interval,date1,date2)函數(shù)的定義為“返回兩個日期之間的時間間隔”。
Intervals參數(shù)的用法與DateAdd函數(shù)中的相同。出于避免過于復雜的考慮,我們決定忽略Vbscript中DateDiff函數(shù)中其它復雜的參數(shù),即其兩個可選的參數(shù)變量[firstdayofweek[, firstweekofyear]](它們用于決定星期中第一天是星期天還是星期一和一年中第一周的常數(shù)。而且我們只允許intervals有以下五個值:"w"(周)、"d"(天)、"h"(小時)、"n"(分鐘) 和"s"(秒)。
Let's see what we can come up with: 下面的代碼是我們所需要的:
復制代碼 代碼如下:

<?
Function DateDiff ($interval, $date1,$date2) {
// 得到兩日期之間間隔的秒數(shù)
$timedifference = $date2 - $date1;
switch ($interval) {
case "w": $retval = bcdiv($timedifference ,604800); break;
case "d": $retval = bcdiv( $timedifference,86400); break;
case "h": $retval = bcdiv ($timedifference,3600); break;
case "n": $retval = bcdiv( $timedifference,60); break;
case "s": $retval = $timedifference; break;
}
return $retval;}
?>;

將上面的代碼存為datediff.inc文件,然后運行下面的代碼:
復制代碼 代碼如下:

<?
include('datediff.inc');
include('dateadd.inc');
$currenttime = time();
echo "Current time: ". strftime("%Hh%M %A %d %b" ,$currenttime)."br";
$newtime = DateAdd ("n",50 ,$currenttime);
echo "Time plus 50 minutes: ". strftime("%Hh%M %A %d %b" ,$newtime)."br";
$temptime = DateDiff ("n",$currenttime ,$newtime);
echo "Interval between two times: ".$temptime;
?>;

如果一切順利,你可以看到以下結果:
Current time: 16h23 Saturday 03 Jun
Time plus 50 minutes: 17h13 Saturday 03 Jun
Interval between two times: 50
如果你在Unix機器上運行PHP,你必須編譯PHP支持BC高精度函數(shù)。你必須從以下地址http://www.php.net/extra/number4.tar.gz下載BC庫,然后將其解壓到PHP4的根目錄下,重新編譯PHP,編譯時要加上--enable-bcmath的選項。(詳細說明見PHP4中README.BCMATH)。PHP4的Windows版本則不需要做任何修補即可直接使用BC高精度函數(shù)。
現(xiàn)在你已經得到處理日期和時間的函數(shù),剩下的就是如何將其運用到你的PHP程序中。

相關文章

  • php使用pear_smtp發(fā)送郵件

    php使用pear_smtp發(fā)送郵件

    這篇文章主要介紹了php使用pear_smtp發(fā)送郵件的相關資料,內容很豐富,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 解析Linux下Varnish緩存的配置優(yōu)化

    解析Linux下Varnish緩存的配置優(yōu)化

    本篇文章是對Linux下Varnish緩存的配置優(yōu)化進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • php多線程并發(fā)實現(xiàn)方法

    php多線程并發(fā)實現(xiàn)方法

    這篇文章主要介紹了php多線程并發(fā)實現(xiàn)方法,結合實例形式分析了php模擬多線程并發(fā)的相關操作技巧,以及在Linux平臺借助shell實現(xiàn)多線程并發(fā)的操作方法,需要的朋友可以參考下
    2016-09-09
  • PHP緩存技術的多種方法小結

    PHP緩存技術的多種方法小結

    這里所說的數(shù)據(jù)緩存是指數(shù)據(jù)庫查詢PHP緩存機制,每次訪問頁面的時候,都會先檢測相應的緩存數(shù)據(jù)是否存在,如果不存在,就連接數(shù)據(jù)庫,得到數(shù)據(jù),并把查詢結果序列化后保存到文件中,以后同樣的查詢結果就直接從緩存表或文件中獲得
    2012-08-08
  • php實現(xiàn)檢查文章是否被百度收錄

    php實現(xiàn)檢查文章是否被百度收錄

    這篇文章主要介紹了php實現(xiàn)檢查文章是否被百度收錄,本文在后臺中實現(xiàn)檢測百度收錄情況,使用非常方便,需要的朋友可以參考下
    2015-01-01
  • 如何在php中正確的使用json

    如何在php中正確的使用json

    以下是對在php中正確使用json的方法進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • php基于PDO實現(xiàn)功能強大的MYSQL封裝類實例

    php基于PDO實現(xiàn)功能強大的MYSQL封裝類實例

    這篇文章主要介紹了php基于PDO實現(xiàn)功能強大的MYSQL封裝類,結合完整實例形式分析了php基于pdo實現(xiàn)mysql數(shù)據(jù)庫連接、增刪改查、事務等操作的方法,需要的朋友可以參考下
    2017-02-02
  • 深入理解PHP中的Streams工具

    深入理解PHP中的Streams工具

    這篇文章主要介紹了PHP中的Streams工具,主要用來處理PHP中的包裝類,需要的朋友可以參考下
    2015-07-07
  • php版微信支付api.mch.weixin.qq.com域名解析慢原因與解決方法

    php版微信支付api.mch.weixin.qq.com域名解析慢原因與解決方法

    這篇文章主要介紹了php版微信支付api.mch.weixin.qq.com域名解析慢原因與解決方法,詳細分析了微信支付api.mch.weixin.qq.com域名解析慢原因與使用curl_easy_setopt指定ipv4解決ipv6解析問題的相關技巧,需要的朋友可以參考下
    2016-10-10
  • phpinfo() 中 Local Value(局部變量)Master Value(主變量) 的區(qū)別

    phpinfo() 中 Local Value(局部變量)Master Value(主變量) 的區(qū)別

    這篇文章主要介紹了phpinfo() 中 Local Value(局部變量)Master Value(主變量) 的區(qū)別,需要的朋友可以參考下
    2016-02-02

最新評論