0

我在 Symofny2 应用程序中的 php 方法上作为字符串传递了一个变量:

public function eventAllByScenarioAndDateAction($apiVersion, $scenario,$date, $options)

那么$date必须是 DateTime 格式的类型,YYYY-MM-DD HH:MM:SS才能通过使用 sql 查询来传递它以填充表。

我想检查传递的格式是否正确,所以我放了控件:

$dateControl1=strtotime($date);

然后是 if 语句:

if ($dateControl1 === false)

但是如果我发送类似的东西2013-33-01而不是例如如果我切断HH:MM:SS

那么我如何检查 $date 是如何传递给方法的,例如,如果我只有YYYY-MM-DD(但正确)或全部有不同的行为YYYY-MM-DD HH:MM:SS

同样,我如何丢弃与预期格式不同的格式(例如使用 / 而不是 - 等)

4

2 回答 2

0

没有必要那么具体。以下工作正常:

$foo = new DateTime("2013-01-01");
$bar = new DateTime("2013-01-01 01:23:45");
echo $foo->format("Y-m-d H:i:s"); // 2013-01-01 00:00:00
echo $bar->format("Y-m-d H:i:s"); //2013-01-01 01:23:45

如果无效日期是您主要关心的问题,请使用 try/catch 子句:

try {
    $baz = new DateTime("foobar");
} catch (Exception $e) {
    // do something else here
    // like throwing an HTTP Exception
}
于 2013-10-23T14:01:39.300 回答
0

实际上@nietonfir 解决方案对我来说很好用:

try { $dateNew = new \DateTime('$date'); } catch (\Exception $e) { echo return $e;  }

(注意一些绕过 symofny 异常的声明之前的“\”)因为如果有人只通过 YYYY-mm-dd 日期在 00:00:00 小时之前完成但是我想做的是检查什么是 $date在验证之前!

所以例如

SOMETHING THAT CHECKIN DATE IF ITS yyyy-mm-dd `hh:mm:ss OR just yyyy-mm-dd
and THEN IF WE ARE IN THE SECOND CASE DOING SOMETHING BEFORE doing

try { $dateNew = new \DateTime('$date'); } catch (\Exception $e) { echo return $e;  }

方法如:

list($date1, $time) = explode("  ",$date);

不起作用,因为如果我们处于 yyyy-mm-dd 情况下,则无法识别空格“”,并且会引发如下异常:

Notice: Undefined offset: 1 in...........
于 2013-10-29T10:36:21.960 回答