將日期轉換為另一種格式
基礎
將一種日期格式轉換為另一種日期格式的簡單方法是將 strtotime()
與 date()
一起使用。strtotime()
會將日期轉換為 Unix 時間戳 。然後可以將 Unix 時間戳傳遞給 date()
以將其轉換為新格式。
$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
或者作為一個單行:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
請記住,strtotime()
要求日期採用有效格式 。未能提供有效格式將導致 strtotime()
返回 false,這將導致你的日期為 1969-12-31。
使用 DateTime()
從 PHP 5.2 開始,PHP 提供了 DateTime()
類,它為我們提供了更強大的工具來處理日期(和時間)。我們可以使用 DateTime()
重寫上面的程式碼,如下所示:
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
使用 Unix 時間戳
date()
將 Unix 時間戳作為其第二個引數,併為你返回格式化的日期:
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime()
通過在時間戳之前新增 @
來使用 Unix 時間戳:
$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');
如果你擁有的時間戳以毫秒為單位(可能以 000
結尾和/或時間戳長度為 13 個字元),則需要將其轉換為秒才能將其轉換為其他格式。有兩種方法可以做到這一點:
- 使用
substr()
修剪最後三位數字
修剪最後三位數可以通過多種方式實現,但使用 substr()
是最簡單的方法:
$timestamp = substr('1234567899000', -3);
- 將 substr 除以 1000
你還可以通過除以 1000 將時間戳轉換為秒。由於時間戳太大,32 位系統無法進行數學運算,因此需要使用 BCMath 庫將數學作為字串進行處理:
$timestamp = bcdiv('1234567899000', '1000');
要獲取 Unix 時間戳,你可以使用 strtotime()
返回 Unix 時間戳:
$timestamp = strtotime('1973-04-18');
使用 DateTime()
,你可以使用 DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
如果你執行的是 PHP 5.2,則可以使用 U
格式化選項:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
使用非標準和模糊的日期格式
不幸的是,並非開發人員必須使用的所有日期都採用標準格式。幸運的是,PHP 5.3 為我們提供瞭解決方案。 DateTime::createFromFormat()
允許我們告訴 PHP 日期字串的格式,以便可以成功解析為 DateTime 物件以進行進一步操作。
$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
在 PHP 5.4 中,我們獲得了在例項化時進行類成員訪問的能力,這使我們能夠將我們的 DateTime()
程式碼轉換為單行程式碼:
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
不幸的是,這還不適用於 DateTime::createFromFormat()
。