检查datetime变量中是否设置时间的最简单方法是什么

时间:2018-06-01 06:33:12

标签: php

我的函数之一是$date变量。

有时日期有时间(如2018-01-01 15:40:43),

有时候 - 没有(比如2018-01-01)。

我想知道时间是否已经确定。 最简单的方法是什么?

这是我试过的:

function checkDate ($date) {
   $time = date("H:i:s", strtotime($date));
   if ($time == '00:00:00') {
       //time was not set!
   }
}

显然,这有效,但直到2018-06-01 00:00:00之类的东西都会传递。

如果有其他解决方案,我不想使用explode字符串。

谢谢/.

3 个答案:

答案 0 :(得分:3)

您可以使用Datetime类进行测试。下面的代码将尝试从日期创建Datetime对象,只要它是指定的格式。

因此,如果您传递的日期不是您指定的时间格式的日期,则会出错。然后使用getLastErrors()进行检查。

像这样:

function checkIsDate($date){

  $date = DateTime::createFromFormat('Y-m-d', $date);
  $date_errors = DateTime::getLastErrors();

  if ($date_errors['warning_count'] + $date_errors['error_count'] == 0) {

  return TRUE;

  } else {

    return FALSE;

    }

}

echo checkIsDate('2018-05-29')?'True':'False'; //<-- Will return true;
echo checkIsDate('2018-05-29 11:30:00')?'True':'False'; //<-- Will return false;
echo checkIsDate('05/29/2018')?'True':'False'; //<-- Will return false;

答案 1 :(得分:2)

我认为你可以使用date_parse

检查一下:http://php.net/manual/en/function.date-parse.php

enter image description here

您可以检查结果数组中的分钟,小时和秒:D

您也可以查看日期中的错误。

enter image description here

答案 2 :(得分:0)

为了完整起见,这里是一个普通的字符串函数版本:

$input = [
    '2018-01-01',
    '2018-01-01 15:40:43',
    '2018-01-01 00:00:00',
];
foreach ($input as $string) {
    list($year, $month, $day, $hour, $minutes, $seconds) = array_pad(preg_split('/[^\\d]+/i', $string, -1, PREG_SPLIT_NO_EMPTY), 6, null);
    printf("%s has time? %s\n", $string, $hour!==null ? 'Yes' : 'No');
}
2018-01-01 has time? No
2018-01-01 15:40:43 has time? Yes
2018-01-01 00:00:00 has time? Yes

根据自己的喜好调整支票。

我不建议这样做。原生日期/时间功能可以更好地处理无效输入。