
Joomla 的樣板、模組很多是國外開發的,文章日期常顯示成「25 September 2026」或「25.09.2026」這類格式,台灣的讀者看起來不太習慣。
改日期格式有兩種做法:
- 語言覆寫:不用寫程式,從後台一次修改全站用到的日期格式。
- 在程式裡指定格式:只想改某一個地方,或樣板、模組把格式寫死在程式裡時使用。
建議先試第一種。
Joomla 的日期格式從哪裡來?
Joomla 顯示日期時,大多不會把格式寫死,而是讀取語言檔裡的「日期格式常數」。以英文語言檔為例:
DATE_FORMAT_LC1:l, d F Y,例如 Friday, 25 September 2026DATE_FORMAT_LC2:l, d F Y H:i,多了時間DATE_FORMAT_LC3:d F Y,例如 25 September 2026DATE_FORMAT_LC4:Y-m-d,例如 2026-09-25
以 Joomla 4/5 內建的文章資訊(發佈日期、建立日期、修改日期)為例,用的是 DATE_FORMAT_LC3。你安裝的中文語言套件可能已經有自己的格式,第三方樣板、模組也可能用別的常數,實際情況以網站畫面為準。
格式裡的英文字母是 PHP 的日期格式代碼,常用的有:
Y:四位數年份(2026)m:月份,補零(09);n:月份,不補零(9)d:日期,補零(05);j:日期,不補零(5)H:24 小時制的小時;i:分鐘l:星期幾;F:月份名稱(Joomla 會依網站語言翻譯)
中文字可以直接寫在格式裡,例如 Y 年 n 月 j 日 會顯示「2026 年 9 月 25 日」。
方法一:用語言覆寫修改全站格式(不用寫程式)
- 到後台「系統 → 語言覆寫」(System → Language Overrides)。
- 在上方的篩選選單,選擇網站前台(Site)使用的語言。
- 按「新增」,「語言常數」填
DATE_FORMAT_LC3,「文字」填想要的格式,例如Y-m-d或Y 年 n 月 j 日。 - 儲存後回到前台重新整理,文章上的日期就會改變。
其他常數(DATE_FORMAT_LC1、DATE_FORMAT_LC2 等)也是同樣的方法。語言覆寫存在網站自己的覆寫檔裡,Joomla 或語言套件更新時不會被蓋掉。多語系網站要針對每一種語言各設定一次。
方法二:在程式裡指定日期格式
樣板或模組把格式寫死在程式裡、或只想改某一個地方時,就要改程式。不要直接改擴充套件的原始檔案,請用樣板覆寫(做法請看Joomla 樣板覆寫教學),更新時才不會被覆蓋。
Joomla 4/5 的寫法:
<?php
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
// 使用語言檔裡的格式
echo HTMLHelper::_('date', $item->publish_up, Text::_('DATE_FORMAT_LC3'));
// 直接指定格式
echo HTMLHelper::_('date', $item->publish_up, 'Y-m-d');- 大部分的覆寫檔開頭已經有這兩行
use,沒有的話再加上。 $item要換成那個檔案裡實際的變數:文章頁通常是$this->item,共用版面是$displayData['item'],模組則依模組而定。
比較完整的寫法,是加上 HTML 的 time 標籤,並在日期是空值時不顯示:
<?php if (!empty($item->publish_up)) : ?>
<time datetime="<?php echo HTMLHelper::_('date', $item->publish_up, 'c'); ?>">
<?php echo HTMLHelper::_('date', $item->publish_up, 'Y-m-d'); ?>
</time>
<?php endif; ?>datetime 屬性裡放的是標準格式(c 代表 ISO 8601),給搜尋引擎和瀏覽器讀;標籤中間的文字才是給讀者看的格式。
舊寫法要改的地方
這篇文章舊版的寫法是:
<?php echo JHtml::_('date', $item->publish_up, JText::_('d.m.Y')); ?>JHtml、JText是 Joomla 3 的類別名稱,Joomla 4/5 改成HTMLHelper、Text。舊名稱目前靠相容機制還能用,但之後的版本會移除,新寫的程式請用新名稱。JText::_('d.m.Y')是把格式字串拿去查語言常數,查不到就原樣傳回,等於沒有作用。要嘛用語言常數(Text::_('DATE_FORMAT_LC4')),要嘛直接寫格式('Y-m-d')。
為什麼不直接用 PHP 的 date()?
Joomla 資料庫裡的時間是以 UTC(世界標準時間)儲存的。HTMLHelper::_('date', ...) 會自動換算成網站設定的時區(「系統 → 全域設定 → 伺服器」裡的網站時區)或使用者自己設定的時區。直接用 PHP 的 date() 搭配 strtotime(),就沒有這個換算,台灣的網站可能會差 8 個小時。
顯示民國年
PHP 的日期格式沒有民國年,要自己換算(西元年減 1911):
<?php
$year = (int) HTMLHelper::_('date', $item->publish_up, 'Y') - 1911;
echo '民國 ' . $year . ' 年 ' . HTMLHelper::_('date', $item->publish_up, 'n 月 j 日');模組的日期格式
有些第三方模組在模組設定裡就有「日期格式」欄位,可以直接填 Y-m-d 這類格式,不必改程式。動手寫覆寫之前,先看看模組設定有沒有這個選項。
延伸閱讀
- Joomla 樣板覆寫(Template Override)教學:不改核心,修改文章與模組的輸出
- Joomla 白畫面(空白頁)怎麼辦?從錯誤記錄到擴充套件衝突的完整排查順序
- PHP「Cannot use object of type stdClass as array」錯誤:物件與陣列存取的差異與解法
日期、時間這些小細節,也會影響讀者對網站專不專業的印象。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供客製化網頁設計與 RWD 響應式網站,歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。