我想检测字符串是否是时间( 00:18:31 )。我知道strtotime()
,但它也会检测到" now
"好的,等等。我需要一个真正的解决方案。
答案 0 :(得分:5)
试试这个: -
if (DateTime::createFromFormat('H:i:s', $yourtimeString) !== FALSE) {
echo "it's a date";
}else{
echo "it's not a date";
}
输入: - 00:18:31输出: - 这是一个日期
输入: - 现在,现在,现在(),现在()输出: - 它不是日期
答案 1 :(得分:1)
validateTime()
函数检查给定的字符串是否是有效时间。使用 DateTime
类和 createFromFormat()
静态方法。
function validateTime($time, $format = 'H:i:s'){
$t = DateTime::createFromFormat($format, $time);
return $t && $t->format($format) === $time;
}
// Returns true
echo var_dump(validateTime("00:18:31"));
echo var_dump(validateTime("23:59:59"));
echo var_dump(validateTime("00:02:30"));
// Returns false
echo var_dump(validateTime("31:18:31"));
echo var_dump(validateTime("24:00:00"));
echo var_dump(validateTime("23:60:60"));
对$t->format($format) === $time
的解释
是检查时间是否确实是真实时间的测试。例如 23:59:59 是有效时间,但 24:00:00 不是。
我们都知道 23:59:59 是人类可接受的最大时间。而 24:00:00 不是。但是,我们可以假设它意味着第二天 00:00:00。这就是DateTime::createFromFormat
所做的!当我们给它一个时间超过最大值。它通过将剩余时间添加到第二天来接受它。
例如
今天是 2021-05-14 23:59:59
并且检查我们是否将其提供给 createFromFormat
的时间是 24:02:30 日期变为第二天 2021-05-15 00:02:30 < br/>
我们注意到 24:02:30 != 00:02:30
。因此,我们可以总结出无效时间。要有效,它必须相同!