Joomla封裝了JDate類來處理日期時間,這個類擴展自PHP的DateTime類。JDate類允許開發(fā)者格式化日期,MySQL交互,UNIX時間戳計算,還提供不同時區(qū)的轉(zhuǎn)換方法。
關(guān)于JDate的類名稱說明
在J3.x后,JDate類已經(jīng)使用命名空間的方式進行了重新的定義。為了保持兼容,Joomla對很多的類都提供了別名,JDate,JApplication等等類似的類名實際上是命名空間類的一個別名。我們建議在開發(fā)中使用命名空間的方式來使用這些類,這樣在一些代碼編輯器中會有更好的代碼提示和檢驗,以便改善開發(fā)體驗,從而減少出錯。
關(guān)于系統(tǒng)中其他的別名類,可以參考這篇文章 Joomla類別名映射表。
創(chuàng)建一個Date的實例
在使用JDate類之前,我們需要獲得一個JDate實例。系統(tǒng)提供以下幾種方式來獲得一個Date實例。
使用new方法,代碼如下:
use Joomla\CMS\Date\Date;
$date = new Date();
|
使用Date類的靜態(tài)方法來獲得一個實例,代碼如下:
use Joomla\CMS\Date\Date;
$date = Date::getInstance();
|
使用工廠方法,代碼如下:
use Joomla\CMS\Factory;
$date = Factory::getDate();
|
參數(shù)說明
通過構(gòu)造器方法和getInstance方法獲得Date對象的時候,允許我們提供兩個可選參數(shù) 。一個是日期字符串,另外一個是時區(qū)。如果不傳遞參數(shù),默認會使用當前的日期和時間作為第一個參數(shù),用戶的時區(qū)設置作為第二個參數(shù)。
如果要使用第一個參數(shù),那么這個參數(shù)應該能被PHP的DateTime構(gòu)造方法支持。典型的用法如下:
use Joomla\CMS\Date\Date;
$currentTime = new Date('now');
$tomorrowTime = new Date('now +1 day');
$plus1MonthTime = new Date('now +1 month');
$plus1YearTime = new Date('now +1 year');
$plus1YearAnd1MonthTime = new Date('now +1 year +1 month');
$plusTimeToTime = new Date('now +1 hour +30 minutes +3 seconds');
$combinedTimeToTime = new Date('now -1 hour -30 minutes 23 seconds');
$date = new Date('2012-12-1 15:20:00');
|
另外,我們也可以使用一個Unix時間戳(以秒為單位)作為第一個參數(shù),系統(tǒng)會自動將它轉(zhuǎn)換為時間,如果指定了時區(qū),那么在轉(zhuǎn)換的時候會基于給定的時區(qū)進行重轉(zhuǎn)。
輸出時間
在輸出日期的時候,我們一般不建議直接輸出。因為默認情況下Date對象的toString()方法并沒有考慮時區(qū)和本地化的日期格式問題,這樣會造成不好的用戶體驗,更糟糕的情況可能導致不同地方輸出的時間不一致。因此,在輸出的時候請使用下面的方法來輸出,
通用的日期格式
Joomla在語言包中預定義了一些常用的日期格式,這樣做的一個好處就是能夠支持多語言。常用的格式字符串如下:
DATE_FORMAT_LC="l, d F Y"
DATE_FORMAT_LC1="l, d F Y"
DATE_FORMAT_LC2="l, d F Y H:i"
DATE_FORMAT_LC3="d F Y"
DATE_FORMAT_LC4="Y-m-d"
DATE_FORMAT_LC5="Y-m-d H:i"
DATE_FORMAT_LC6="Y-m-d H:i:s"
DATE_FORMAT_JS1="y-m-d"
DATE_FORMAT_CALENDAR_DATE="%Y-%m-%d"
DATE_FORMAT_CALENDAR_DATETIME="%Y-%m-%d %H:%M:%S"
DATE_FORMAT_FILTER_DATE="Y-m-d"
DATE_FORMAT_FILTER_DATETIME="Y-m-d H:i:s"
|
為了方便輸出,Joomla提供了HtmlHelper類的date方法。 代碼如下:
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
$myDateString = '2012-12-1 15:20:00';
echo HtmlHelper::date($myDateString, Text::_('DATE_FORMAT_FILTER_DATETIME'));
|
另外,也可以使用Date的format()方法來輸出。代碼如下:
use Joomla\CMS\Language\Text;
use Joomla\CMS\Date\Date;
use Joomla\CMS\Factory;
$myDateString = '2012-12-1 15:20:00';
$timezone = Factory::getUser()->getTimezone();
$date = new Date($myDateString);
$date->setTimezone($timezone);
echo $date->format(Text::_('DATE_FORMAT_FILTER_DATETIME'));
|
因為format方法需要提供時區(qū)的設置,此方法對于格式化用戶界面外部的日期(例如在系統(tǒng)日志或API調(diào)用中)更有用。
其他的一些有用的代碼示例
修改日期的方法。,代碼如下:
use Joomla\CMS\Date\Date;
$date = new Date('2012-12-1 15:20:00');
$date->modify('+1 year');
echo $date->toSQL();
use Joomla\CMS\Date\Date;
$interval = new \DateInterval('P1Y1D');
$date1 = new Date('2012-12-1 15:20:00');
$date1->add($interval);
echo $date1->toSQL();
$date2 = new Date('2012-12-1 15:20:00');
$date2->sub($interval);
echo $date2->toSQL();
|
輸出為其他格式的日期方法 ,代碼如下:
$date = new Date('2012-12-1 15:20:00');
$date->toISO8601();
$date = new Date('2012-12-1 15:20:00');
$date->toRFC822();
$date = new Date('20121201T152000Z');
$date->toSQL();
$date = new Date('20121201T152000Z');
$date->toUnix();
|
更多建議: