我的情况是从用户编辑的数据库中读取发送到$string
的{{1}}变量,如何验证DateTime::modify($string)
是$string
的正确字符串}?
答案 0 :(得分:1)
尝试此功能,根据格式
验证时间戳字符串function validateDate($date, $format = 'Y-m-d H:i:s')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
复制
答案 1 :(得分:0)
在将用户输入保存到数据库之前检查用户输入通常是最佳做法,这样您就可以在出路时对其充满信心。
您也可以使用try / catch块:
modify
编辑:看了这个之后,如果传递给Warning
的字符串无效(不是我原先假设的日期字符串),你的代码将抛出Warning
而不是例外。
set_error_handler
然而,这开始看起来有点讨厌。它可能更干净(在您的代码中,而不是您的日志中)来比较调用function warning_handler($errno, $errstr, $errfile, $errline, array $errcontext) {
throwErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler('warning_handler', E_WARNING);
try {
$date = new DateTime('2016-12-12');
$date->modify('+1 daybla');
echo $date->format('Y-m-d');
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
restore_error_handler();
方法之前和之后的日期,看它们是否不同。
modify
答案 2 :(得分:0)
您可以执行类似的操作,并在将字符串传递到实际日期之前调用它:
Route::get('/cmd', function () {
chdir('../');
$dir = getcwd();
print_r($dir);
$cmd = shell_exec ('php artisan cache:clear');
return $cmd;
});
function modifyIsValid($modifyString) {
$d = new DateTime();
$isValid = $d->modify($modifyString);
if ($isValid === false) {
return false;
}
return true;
}
返回false表示传递的字符串无效,但它也会抛出->modify()
,这是不理想的。
E_Warning
您可以在手册中找到有关它的更多信息:http://php.net/manual/en/datetime.modify.php
希望它有所帮助。
答案 3 :(得分:0)
这里的派对迟到了,这对我很有用......
function isDateModifyValid($String)
{
if (strlen($String) == 0) { return false; }
$now = new \DateTime(null, new \DateTimeZone("UTC"));
$rtn = false; // Default return value
@$now->modify($String) && $rtn = true;
// If modify($string) fails, $rtn won't set to true, else $rtn will set to true
// ^ ^ @ suppress error
return $rtn;
}
//TEST DATA
foreach (array("+1 hour", "+2 hour, -5 minutes", "12:00", "dsfv", "13:00, + 1 hour", "Yesterday, 12:00", "Neext weeekc", "Next month") as $testString)
{
if (isDateModifyValid($testString))
{
echo "VALID ::: $testString\n";
} else {
echo "INVALID ::: $testString\n";
}
}
VALID ::: +1 hour
VALID ::: +2 hour, -5 minutes
VALID ::: 12:00
INVALID ::: dsfv
VALID ::: 13:00, + 1 hour
VALID ::: Yesterday, 12:00
INVALID ::: Neext weeekc
VALID ::: Next month