计算两个DateTime的分钟差时遇解析错误,请求技术帮助
解决DateTime解析
dd/mm/yyyy AM/PM格式失败的问题 嘿,这个问题我太熟悉了!你遇到的DateTime::__construct(): Failed to parse time string错误,核心原因是PHP的DateTime构造函数默认不认识27/09/2020 01:00:19 AM这种日/月/年+12小时制的格式——它默认只认YYYY-MM-DD或者符合RFC标准的时间字符串,所以从第一个字符2开始就解析失败了。
正确的解决方案:用DateTime::createFromFormat()指定解析格式
你需要明确告诉PHP你的时间字符串是什么格式,用DateTime::createFromFormat()方法就能完美解决这个问题。修改后的代码如下:
// 用指定格式解析时间字符串 $datetime1 = DateTime::createFromFormat('d/m/Y h:i:s A', '27/09/2020 01:00:19 AM'); $datetime2 = DateTime::createFromFormat('d/m/Y h:i:s A', '27/09/2020 01:00:19 AM'); // 计算两个时间的间隔 $interval = $datetime1->diff($datetime2); // 输出小时和分钟差 echo $interval->format('%hh %im');
格式符说明:
这里用到的格式符完全对应你的时间字符串结构:
d: 两位数字的日期(比如27)m: 两位数字的月份(比如09)Y: 四位数字的年份(比如2020)h: 12小时制的小时数(比如01)i: 两位数字的分钟(比如00)s: 两位数字的秒数(比如19)A: 大写的AM/PM标识(比如AM)
如果你的时间字符串里是小写的am/pm,把格式符改成a就可以适配。
内容的提问来源于stack exchange,提问作者user3153807




