首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Smarty 日期時間處理完全指南:取得當前時間與格式化輸出

     編輯:PHP 綜合知識

核心差異:PHP vs Smarty

操作PHP 原生Smarty 模板
取得當前時間戳time(){$smarty.now}
格式化輸出date('Y-m-d H:i:s'){$timestamp|date_format:'%Y-%m-%d %H:%M:%S'}

Smarty 內建時間變數

{* 輸出 Unix 時間戳 *}
{$smarty.now}
{* 結果範例:1702236776 *}

date_format 修飾符完整用法

語法:{$timestamp|date_format:'格式字串'},格式字串相容 strftime() 標準。

常用格式字元對照

字元含義範例
%Y四位數年份2024
%m兩位數月份 (01-12)12
%d兩位數日期 (01-31)25
%H24 小時制 (00-23)14
%M分鐘 (00-59)30
%S秒數 (00-59)45
%A完整星期名稱Wednesday
%B完整月份名稱December
%e日期 (1-31,不補零)25

實戰範例

{* 當前時間完整格式 *}
{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}
{* 輸出:2024-12-25 14:30:45 *}

{* 僅顯示時間 *}
{$smarty.now|date_format:'%H:%M:%S'}

{* 長日期格式 *}
{$smarty.now|date_format:'%A, %B %e, %Y'}
{* 輸出:Wednesday, December 25, 2024 *}

{* 格式化傳入變數 *}
{$goods.add_time|date_format:'%Y-%m-%d %H:%M:%S'}

{* 變數預設為當前時間 *}
{$yesterday|date_format:'%Y-%m-%d'}

PHP 控制器傳遞時間變數

$smarty = new Smarty();
$smarty->assign('currtime', time());           // 當前時間戳
$smarty->assign('yesterday', strtotime('-1 day')); // 昨天時間戳
$smarty->display('index.tpl');

模板中完整示範

{* index.tpl *}
<ul>
  <li>當前時間(預設格式):{$smarty.now|date_format}</li>
  <li>當前時間(時分秒):{$smarty.now|date_format:'%H:%M:%S'}</li>
  <li>傳入時間(預設):{$currtime|date_format}</li>
  <li>傳入時間(長格式):{$currtime|date_format:'%A, %B %e, %Y'}</li>
  <li>傳入時間(標準):{$currtime|date_format:'%Y-%m-%d %H:%M:%S'}</li>
</ul>

輸出結果範例

當前時間(預設格式):Dec 25, 2024
當前時間(時分秒):14:30:45
傳入時間(預設格式):Dec 25, 2024
傳入時間(長格式):Wednesday, December 25, 2024
傳入時間(標準):2024-12-25 14:30:45

進階技巧與注意事項

  1. 時區設定:Smarty 使用伺服器時區,需在 PHP 端 date_default_timezone_set('Asia/Taipei') 統一
  2. 快取考量:{$smarty.now} 在模板快取時會被「凍結」,若需即時時間請用 {$smarty.now|date_format} 禁用該區塊快取或改用 JavaScript 客戶端渲染
  3. 格式字串引號:單引號包裹格式字串,內含單引號需跳脫或用雙引號 {$t|date_format:"%Y-%m-%d"}
  4. 無管道符空格:| 前後不可有空格,否則視為字串串接
  5. 預設格式:不指定格式時等同 %b %e, %Y (如 Dec 25, 2024)

常見錯誤排查

錯誤現象原因解決
輸出時間戳而非格式化日期忘記加 |date_format補上修飾符
日期錯誤數小時伺服器時區與目標時區不符PHP 端 date_default_timezone_set()
快取頁面時間不更新模板快取鎖定 $smarty.now區塊 {nocache}{$smarty.now|date_format}{/nocache} 或 JS 處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved