You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中解析带时区偏移的Unix时间戳问题

解决Laravel中解析特定格式Unix时间戳的问题

针对格式为/Date(1671847200000-0600)/的时间字符串,可通过以下步骤解析并转换为2022-12-23 18:00:00格式:

核心思路

  1. 用正则提取毫秒级时间戳与时区偏移量(±HHmm格式)
  2. 将毫秒时间戳转换为秒级,同时把时区偏移格式化为Carbon可识别的±HH:mm格式
  3. 借助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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:35:22