如何将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
相关产品推荐
相关产品推荐

