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

如何将Google Calendar日期格式'20240713T011500Z'转换为可用日期?

PHP处理Google Calendar iCal日期格式的内置方法

我通过iCal获取Google Calendar事件,得到的日期格式为20240713T011500Z。常规PHP函数似乎不兼容该格式,我编写了一个转换函数但较为繁琐,想了解是否有内置方法处理该格式?

用户原实现代码:

function convertGCalDate($gdate){
    $parts = explode('T', $gdate);
    $date  = $parts[0];
    $nums  = str_split($date);
    $date  = $nums[0].$nums[1].$nums[2].$nums[3].'-'.$nums[4].$nums[5].'-'.$nums[6].$nums[7];
    
    $time = trim($parts[1], 'Z');
    $zulu = str_ends_with($parts[1], 'Z');
    
    $nums    = str_split($time);
    $newtime = $nums[0].$nums[1].':'.$nums[2].$nums[3].':'.$nums[4].$nums[5];
    
    $dt = $date.' '.$newtime;
    
    // 这是我的时区转换函数,当日期格式正确时可正常工作
    // $datetime = new DateTime($time);
    // $datetime->setTimezone($that_tz);
    // 等等
    $dt = getTimeInThisTimezone($dt, $thatTZ = 'Z', $thisTZ = 'America/Los_Angeles', $outformat = null);
    
    return $dt;
    //2024-07-12 7:15 pm

}

$whatIwant =  convertGCalDate('20240713T011500Z');

其实PHP的DateTime类原生就支持这种ISO 8601格式的日期字符串(末尾的Z代表UTC时区),完全不需要手动拆分字符串处理。你可以用更简洁的方式实现需求:

function convertGCalDate($gdate) {
    // 直接传入格式字符串,DateTime会自动解析UTC时间
    $utcDt = new DateTime($gdate);
    // 转换到目标时区
    $utcDt->setTimezone(new DateTimeZone('America/Los_Angeles'));
    // 格式化输出想要的格式
    return $utcDt->format('Y-m-d g:i a');
}

$whatIwant = convertGCalDate('20240713T011500Z');
// 输出:2024-07-12 7:15 pm

关键说明:

  • DateTime构造函数能直接识别YYYYMMDDTHHMMSSZ格式,无需手动拆分日期和时间部分。
  • 末尾的Z会被自动识别为UTC时区,不需要额外处理。
  • 调用setTimezone()方法可以直接将UTC时间转换为指定时区(比如America/Los_Angeles)。
  • 用format()方法可以轻松输出你需要的日期格式,Y-m-d g:i a对应年-月-日 时:分 上午/下午的格式。

这种方式不仅代码更简洁,还能避免手动字符串操作可能带来的错误,同时利用PHP内置的日期处理机制,兼容性和可靠性更强。

内容的提问来源于stack exchange,提问作者Doug Cassidy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:12:39