Excel条件公式=IF(AD4<AE4,AE4-AD4,0)转换为PHP/MySQL代码咨询
MySQL查询正确写法
MySQL在SELECT语句中做分支判断直接使用内置IF()函数即可,语法为IF(判断条件, 条件成立返回值, 条件不成立返回值),不需要额外写else关键字。如果你的Time Elapsed(已耗时时长)和Speed Fault(设定时长)为TIME/DATETIME类型,需要转换为秒计算后再转回时间格式,符合你要求的hh:mm:ss输出:
SELECT *, IF( TIME_TO_SEC(`Time Elapsed`) < TIME_TO_SEC(`Speed Fault`), SEC_TO_TIME(TIME_TO_SEC(`Speed Fault`) - TIME_TO_SEC(`Time Elapsed`)), '00:00:00' ) AS `Under Time` FROM time_db;
PHP实现代码
如果需要在PHP层完成计算,可直接对时间字符串做秒级转换后判断计算:
<?php /** * 计算时长差值,返回hh:mm:ss格式结果 * @param string $timeElapsed 已耗时时长,格式hh:mm:ss * @param string $speedFault 设定时长,格式hh:mm:ss * @return string */ function calculateUnderTime(string $timeElapsed, string $speedFault): string { // 转换为0点以来的秒数 $elapsedSeconds = strtotime($timeElapsed) - strtotime('00:00:00'); $faultSeconds = strtotime($speedFault) - strtotime('00:00:00'); if ($elapsedSeconds < $faultSeconds) { return gmdate('H:i:s', $faultSeconds - $elapsedSeconds); } return '00:00:00'; } // 调用示例 // 输出 00:02:30 echo calculateUnderTime('00:12:30', '00:15:00'); // 输出 00:00:00 echo calculateUnderTime('00:16:00', '00:15:00'); ?>
如果时间差值可能超过24小时,需自行对差值秒数做天级拆分格式化即可。
内容的提问来源于stack exchange,提问作者dmcomp
相关产品推荐
相关产品推荐

