用PEAR Date進行日期時間處理

日期:2006-10-10  作者:喜騰小二  來源:PHPChina


  PHP內建了日期和時間的處理函式, 這些設計使妳很容易得得到您所需要的格式, 或者使用它進行演算或對使用者進行顯示。但是, 如果您會想做某事被復雜化, 有很多種方法的。

  這是一個在網頁中顯示時間的簡單例子。使用 PHP的date()函式可以讀取伺服器的時間和以一個俱體格式顯示時間。但如果您想顯示時間在一個另外地點- 例如, 如果您的公司們於不同的國家,但您想從位於一個另外國家的伺服器上想看到"家" 時間,而不是當地時間? 當然, 您必須計算出二個地方的時差然後執行一些日期算術調整為不同的時區。時差是很重要的, 您需要考慮到使用前一天新時間還是使用以後的時間, 記錄結束這月和閏年限制。

  和妳想像的一樣, 如果算術能迅速得到非常復雜的時區轉換,何必要您手工做它。PHP 有自帶的時區功能函式, 但這些不是特別直覺的,並且不太符合時間習慣。一個更快的選擇使用PEAR日期處理功能來簡單的對時區執行這些轉換。

  這個講解將教您怎麼用PEAR的日期功能來轉換在時區之間轉換時間。假設, 您已經執行了Apache 和 PHP 並且PEAR日期功能正確地被安裝了。


  開始
  我們從基本開始- 建立和使用Data物件。創造一個PHP 指令檔來執行以下程式碼:

  例子A
//包括類
include("Date.php");

//初始化物件
$d = new Date("2006-06-21 15:45:27");

//檢索日期
echo $d->getdate();
? >

這相當簡單- 包含類, 初始化一個 Date() 物件與日期/時間串, 和然後使用 getDate() 方法顯示您插入的時間。下麵是輸出:
2006-06-21 15:45:27

  您若想要得到不同格式的日期呢? 如果格式依是標準的, 譬如ISO 格式, 簡單地使用 getDate()加參數來完成就行了。

  例子B
//包括類
include("Date.php");

//初始化物件
$d = new Date("2006-06-21 15:45:27");

//檢索日期作為時間戳
echo  $d->getdate(DATE_FORMAT_ISO_BASIC);
? >
這種情況下依照標準ISO 格式輸出時間,結果如下。
20060621T154527Z

如果您會使用一個自已習慣的格式, 您可以使用 format() 方法。PHP 的 date() 函式一樣, 這個方法接受表明的一係列的格式,這些格式用來指定怎麼對日期進行格式化。 下麵是一個例子:

  例子C
//包括類
include("Date.php");

//初始化物件
$d = new Date("2006-06-21 15:45:27");

//檢索日期如同格式化的串
echo $d->format("%A, %d %B %Y %T");
? >
輸出結果如下:

Wednesday, 21 June 2006 15:45:27

  在時區之間轉換
  現您已掌握了一些基本的, 現在我們來談論時區。一旦您使用一個 Date() 物件初始化, 轉換從一個時區到另一個時區隻需要簡單的二步:

1.告訴Date物件您從哪個時區轉換, 使用 setTZByID() 方法。
2.然後, 告訴Date物件您希望轉換成哪個時區, 以 convertTZByID() 方法。

  例子D
//包括類
include("Date.php");

//初始化物件
$d = new Date("2006-06-21 10:36:27");

//設定要轉換時區
$d->settzbyid("GMT");

//轉換到設定的時區
$d->converttzbyid("IST");

//得到轉換的日期/時間
echo $d->format("%A, %d %B %Y %T");
? >

  在這個例子中, 我試圖從格林威治標準時間(格林維誌時間) 轉換成印第安標準時間(IST) 。印度時間大約在格林威治時間5.5 小時之前, 為什麼例子輸出的結果是:

Wednesday, 21 June 2006 16:06:27
很簡單, 不是嗎? 下麵是另外一個例子(例子E)將展示如果處理閏年和月。

   例子E
//包括類
include("Date.php");

//初始化物件
$d = new Date("2008-03-01 06:36:27");

//設定當地時區
$d->settzbyid("GMT");

//輸出當地時間
echo "當地時間是".$d->format("%A, %d %B %Y %T") ."
";

//轉換成目的時區
$d->converttzbyid("PST");

//得到轉換的日期/時間
echo "目的地時間是".$d->format("%A, %d %B %Y %T");
? >

輸出結果是:

當地時間是Saturday, 01 March 2008 06:36:27
目的地時間是Friday, 29 February 2008 22:36:27

計算格林維誌時間時差
有時我們需要計算與格林時間的時差, 透過Date的getRawOffset() 方法可以實現。下麵是一個例子:

  例子F
//包括類
inclue("Date.php");

//初始化物件
$d = new Date("2006-06-21 10:36:27");

//設定當地時區
$d->settzbyid("PST");

//得到未加工的與格林維誌時間的時差,單位是毫秒
echo $d->getrawoffset(>);
? >
這裡, getRawOffset() 方法計算在當地時間和格林維誌時間之間的時差。輸出為:

-28800000
注意這時間差單位為毫秒, 因此您將需要由 3600000 (毫秒的數量在一個小時)為一小時來計算時差在幾小時。

增加和減去時間-Date_Span
Date類可以讓您方便的對時間進行計算,對日期/時間增加或減去時間。這些時間(或timespans)包含天、小時、分鐘被表達作為串 下麵是一個簡單的例子:

  例子G
//包括類
include("Date.php");

//初始化物件
$d = new Date("2006-06-21 15:45:27");

//加01:20
$d->addSpan(new Date_Span("0,1,20,0"));

//得到格式化的字串
echo $d->format("%A, %d %B %Y %T");
? >
在這個例子中, 我為最初的時間戳增加了一小時二十分鐘, 使用Date的 addSpan() 方法和初始化後的Date_Span()物件來進行操作。結果相當容易猜測:

Wednesday, 21 June 2006 17:05:27
正如您能增加timespans, 也能減去他們。那, 實際上, 是subtractSpan () 方法可以達到這個目的 , 下麵是其例子。

  例子H
//包括類
include("Date.php");

//初始化物件
$d = new Date("2006-06-21 15:45:27");

//為時間加01:20
$d->addSpan(new Date_Span("0,1,20,0"));

//減去00:05
$d->subtractSpan(new Date_Span("0,0,5,0"));

// 輸出格式化的串
echo $d->format("%a, %d %B %Y %T");
? >

這裡, 我首先增加了一小時二十分鐘, 和然後減去了五分鐘。實際影響是一小時十五分鐘的加法, 並且輸出結果為:

Wednesday, 21 June 2006 17:00:27

正象上麵的例子一樣, PEAR 的 Date 類提供了直覺高效處理復雜日期的功能。如果您正在尋找一個在不同的地點之間轉換時間戳的免費類,那麼我熱誠地把它推薦給您。關注一下,編程快樂!

<<<返回技術中心

技術文章

站內新聞

我要啦免费统计