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

如何在PHP中从时钟时间减去十进制时间并得到正确结果?

问题分析与修正方案

嘿,我来帮你搞定这个时间计算的问题!你的脚本之所以返回错误的7:00 PM,核心原因是时间戳和字符串拼接的方式错误,加上strtotime对小数小时的字符串解析存在歧义,导致计算完全偏离预期。

问题出在哪?

你的原代码里做了这样的操作:

strtotime( strtotime( $clockTime ) . ' -'.$decimalTime.' hours' )

这里strtotime($clockTime)返回的是一个数字时间戳(比如类似1717251600这样的整数),把它和'-0.75 hours'拼接后,会得到一个类似1717251600 -0.75 hours的字符串——这根本不是strtotime能正确解析的合法时间格式,自然会算出错误的结果。

另外,直接用字符串传递小数小时给strtotime,本身就容易出现解析问题,换成时间戳加减的方式会更精准。

修正后的代码

我们可以直接用时间戳加减秒数的方式来计算,步骤很清晰:

  1. 将小数小时转换成秒数(1小时=3600秒)
  2. 获取初始时间的时间戳,减去对应的秒数
  3. 用date()格式化输出正确时间
<?php
$clockTime = "10:00 AM";
$decimalTime = 0.75; // 建议用数字类型,比字符串更可靠

// 把小数小时转换成要减去的秒数
$secondsToSubtract = $decimalTime * 3600;
// 计算最终时间并格式化
echo date('g:i A', strtotime($clockTime) - $secondsToSubtract); // 输出 "9:15 AM"
?>

额外说明

如果你的$decimalTime必须是字符串(比如从数据库或用户输入获取的),可以先把它转换成浮点型:

$decimalTime = (float)$decimalTime;

这种时间戳运算的方式,避免了strtotime解析字符串时的歧义,在处理非整数时间的时候会稳定很多。

内容的提问来源于stack exchange,提问作者H. Ferrence

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:20:02