本文详解如何使用 php 的 `strtotime()` 和 `date()` 函数,将带时区信息的英文日期字符串(如 `"wed feb 02 2025 00:00:00 gmt+0800"`)安全、准确地解析并格式化为标准 iso 日期(如 `"2025-02-19"`)。
在 Web 开发中,前端 JavaScript 常通过 new Date().toString() 或 toLocaleString() 返回含时区的英文日期字符串(例如 "Wed Feb 02 2025 00:00:00 GMT+0800 (Singapore Standard Time)"),而 PHP 后端需将其标准化处理。关键在于:strtotime() 能自动识别并解析大多数常见英文日期格式(包括 GMT/UTC 偏移),但括号内的时区说明(如 (Singapore Standard Time))属于非标准后缀,建议提前截断以确保兼容性。
以下为推荐实现方式:
// 原始请求日期(可能含括号时区描述)
$raw_date = 'Wed Feb 02 2025 00:00:00 GMT+0800 (Singapore Standard Time)';
// 方案一:正则预处理——移除括号及内部文本(更健壮)
$clean_date = preg_replace('/\s*\([^)]*\)/', '', $raw_date);
// 方案二:简单截断(适用于已知结构)
// $clean_date = substr($raw_date, 0, strpos($raw_date, '('));
$timestamp = strtotime($clean_date);
if ($timestamp === false) {
throw new InvalidArgumentException('无法解析日期字符串: ' . $raw_date);
}
$formatted_date = date('Y-m-d', $timestamp);
echo $formatted_date; // 输出:2025-02-02⚠️ 注意事项:

$dt = new DateTime($clean_date, new DateTimeZone('Asia/Singapore'));
echo $dt->format('Y-m-d'); // 更精确可控总结:优先清洗输入(移除括号内冗余文本),再用 strtotime() + date() 快速转换;对高可靠性场景,推荐 DateTime 面向对象方案。