Php,如何确定字符串是否是时间?

时间:2015-05-09 00:01:41

标签: php

我想检测字符串是否是时间( 00:18:31 )。我知道strtotime(),但它也会检测到" now"好的,等等。我需要一个真正的解决方案。

2 个答案:

答案 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。因此,我们可以总结出无效时间。要有效,它必须相同!