Joomla 日期操作類 JDate

2023-03-10 15:53 更新

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(); // 使用當前的日期時間創(chuàng)建一個date對象

使用Date類的靜態(tài)方法來獲得一個實例,代碼如下:

use Joomla\CMS\Date\Date;
$date = Date::getInstance(); // 是 'new Date();'的一個別名

 使用工廠方法,代碼如下:

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'); // 當前的時間, + 1 天
$plus1MonthTime = new Date('now +1 month'); // 當前時間, + 1 月
$plus1YearTime = new Date('now +1 year'); // 當前時間, + 1 年.
$plus1YearAnd1MonthTime = new Date('now +1 year +1 month'); // 當前時間, + 1年1月
$plusTimeToTime = new Date('now +1 hour +30 minutes +3 seconds'); // 當前時間, + 1 小時30分3秒
$combinedTimeToTime = new Date('now -1 hour -30 minutes 23 seconds'); // 當前時間, - 1 小時, +30分鐘 +23 秒
 
$date = new Date('2012-12-1 15:20:00'); // 3:20 PM, December 1st, 2012

另外,我們也可以使用一個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'));//默認使用當前用戶的時區(qū)

 另外,也可以使用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(); // 2013-12-01 15:20:00
use Joomla\CMS\Date\Date;
 
$interval = new \DateInterval('P1Y1D'); // Interval represents 1 year and 1 day
 
$date1 = new Date('2012-12-1 15:20:00');
$date1->add($interval); //加一年一月
echo $date1->toSQL(); // 2013-12-02 15:20:00
 
$date2 = new Date('2012-12-1 15:20:00');
$date2->sub($interval);//減一年一月
echo $date2->toSQL(); // 2011-11-30 15:20:00

輸出為其他格式的日期方法 ,代碼如下:

// 輸出 ISO 8601 格式
$date = new Date('2012-12-1 15:20:00');
$date->toISO8601(); // 20121201T152000Z
 
//輸出 RFC 822 格式
$date = new Date('2012-12-1 15:20:00');
$date->toRFC822(); // Sat, 01 Dec 2012 15:20:00 +0000
 
//輸出 SQL Date-Time 格式
$date = new Date('20121201T152000Z');
$date->toSQL(); // 2012-12-01 15:20:00
 
//輸出Unix時間戳 格式
$date = new Date('20121201T152000Z');
$date->toUnix(); // 1354375200


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號