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

PHP 時區轉換工具函數:DateTime 物件實現跨時區時間計算

     編輯:PHP 相關知識

部署於海外主機(如 GoDaddy)的專案常需將伺服器時間轉換為目標時區(如 Asia/Shanghai)。使用 PHP 內建 DateTime 與 DateTimeZone 類別,能優雅處理夏令時、閏秒等複雜規則。

核心函數實現

/**
 * 將指定時區的時間字串轉換為目標時區
 *
 * @param string $src_time  源時間字串,格式需與 $format 參數一致
 * @param string $from_tz   源時區標識符,如 'America/Denver'
 * @param string $to_tz     目標時區標識符,如 'Asia/Shanghai'
 * @param string $format    輸出格式,預設 'Y-m-d H:i:s'
 * @return string|false     轉換後的時間字串,失敗返回 false
 */
function convert_timezone(
    string $src_time,
    string $from_tz = 'America/Denver',
    string $to_tz = 'Asia/Shanghai',
    string $format = 'Y-m-d H:i:s'
): string|false {
    try {
        $dt = new DateTime($src_time, new DateTimeZone($from_tz));
        $dt->setTimezone(new DateTimeZone($to_tz));
        return $dt->format($format);
    } catch (Exception $e) {
        error_log("Timezone conversion failed: {$e->getMessage()}");
        return false;
    }
}

使用範例

// 美東時間轉北京時間
$us_time = '2024-03-10 02:30:00'; // 夏令時生效前
echo convert_timezone($us_time, 'America/New_York', 'Asia/Shanghai');
// 輸出: 2024-03-10 15:30:00 (相差 13 小時)

$us_time_dst = '2024-07-10 02:30:00'; // 夏令時期間
echo convert_timezone($us_time_dst, 'America/New_York', 'Asia/Shanghai');
// 輸出: 2024-07-10 14:30:00 (相差 12 小時,自動處理 DST)

進階應用:批量轉換與快取

高頻調用時可快取 DateTimeZone 物件:

class TimezoneConverter {
    private array $zone_cache = [];

    private function get_zone(string $tz): DateTimeZone {
        return $this->zone_cache[$tz] ??= new DateTimeZone($tz);
    }

    public function convert(string $time, string $from, string $to, string $fmt = 'Y-m-d H:i:s'): string|false {
        try {
            $dt = new DateTime($time, $this->get_zone($from));
            $dt->setTimezone($this->get_zone($to));
            return $dt->format($fmt);
        } catch (Exception $e) {
            return false;
        }
    }
}

常見時區標識符速查

地區標識符備註
中國大陸Asia/Shanghai無夏令時
香港/台灣Asia/Hong_Kong / Asia/Taipei同上
美國東部America/New_York含 DST
美國西部America/Los_Angeles含 DST
歐洲中部Europe/Berlin含 DST
UTCUTC基準時區

注意事項

  • PHP 版本需 ≥ 5.2.0;
  • 輸入時間字串格式必須與實際一致,建議統一用 ISO 8601 (Y-m-d H:i:s);
  • 資料庫儲存建議統一用 UTC 時間戳(time() 或 DATE_TIMESTAMP),顯示層再轉換。

善用 DateTime 物件,讓跨時區業務邏輯更健壯、可維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved