【问题标题】:php check if DateTime parsing is possiblephp 检查是否可以进行 DateTime 解析
【发布时间】:2017-03-15 20:54:45
【问题描述】:

是否有可能检查DateTime() 是否可以解析字符串?例如,当我尝试时:

new DateTime('05.06.17');

DateTime 无法解析它并会抛出异常。那么,我怎样才能防止这种情况并在解析是否可行之前检查呢? DateTime 可以读取很多可能的格式,我不想用正则表达式检查它们中的每一个...

【问题讨论】:

  • 我认为date_parse 是您所需要的。它将在无效日期返回 false

标签: php datetime


【解决方案1】:

使用date_parse,它将接受一个日期字符串并返回一个包含日期详细信息的数组。如果无法解析,则返回false,以便您使用:

if (date_parse($myDateSring) !== false) {
    //valid date
}

如果$myDateSring 是有效日期,该函数将返回日期部分的索引数组。例如:

print_r(date_parse("2006-12-12 10:00:00.5"));

Array
    (
        [year] => 2006
        [month] => 12
        [day] => 12
        [hour] => 10
        [minute] => 0
        [second] => 0
        [fraction] => 0.5
        [warning_count] => 0
        [warnings] => Array()
        [error_count] => 0
        [errors] => Array()
        [is_localtime] => 
    )

【讨论】:

  • 不幸的是它不起作用:var_dump(date_parse('16/03/2017 17:13')) 给出 true 但 new DateTime('16/03/2017 17:13') 不起作用
  • 在这种情况下,您可能需要检查结果数组并提取您感兴趣的部分。我将使用文档中的示例更新我的答案
【解决方案2】:

在这种情况下,最好的选择是在考虑格式的情况下创建检查日期是否正确的函数。

如果可以创建日期,则可以对其进行解析。

function validateDate($date, $format) {
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;
}

函数是从 answerphp.net 复制而来的

函数返回truefalse

【讨论】:

  • 好的,我明白你的意思了。我的问题是为什么你不喜欢出现错误时的异常?
猜你喜欢
  • 1970-01-01
  • 2011-05-02
  • 2016-08-24
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多