You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

计算两个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

火山引擎 最新活动