Laravel中解析带时区偏移的Unix时间戳问题
解决Laravel中解析特定格式Unix时间戳的问题
针对格式为/Date(1671847200000-0600)/的时间字符串,可通过以下步骤解析并转换为2022-12-23 18:00:00格式:
核心思路
- 用正则提取毫秒级时间戳与时区偏移量(±HHmm格式)
- 将毫秒时间戳转换为秒级,同时把时区偏移格式化为Carbon可识别的±HH:mm格式
- 借助Laravel内置的Carbon类完成时间转换与格式化
代码实现
$dateString = '/Date(1671847200000-0600)/'; // 匹配提取时间戳和时区偏移,同时做格式校验 if (!preg_match('/\/Date\((\d+)([+-]\d{4})\)\//', $dateString, $matches)) { throw new \InvalidArgumentException('时间格式不符合要求'); } // 处理时间戳:毫秒转秒 $timestamp = (int)$matches[1] / 1000; // 处理时区偏移:将±HHmm转为±HH:mm $timezoneOffset = substr($matches[2], 0, 3) . ':' . substr($matches[2], 3); // 生成Carbon实例并格式化输出 $formattedDate = \Carbon\Carbon::createFromTimestamp($timestamp, $timezoneOffset) ->format('Y-m-d H:i:s'); echo $formattedDate; // 输出:2022-12-23 18:00:00
说明
- 正则表达式
/\/Date\((\d+)([+-]\d{4})\)\//精准匹配目标格式,捕获两组关键数据:第一组是毫秒时间戳,第二组是时区偏移 - Carbon是Laravel默认集成的日期处理库,
createFromTimestamp方法支持传入时区偏移参数,确保时间转换的准确性 - 加入格式校验逻辑,避免因输入格式错误导致程序异常
内容的提问来源于stack exchange,提问作者Ahamed Nadheem M
相关产品推荐
相关产品推荐

