【问题标题】:How to check string on date in laravel?如何在laravel中检查日期字符串?
【发布时间】:2018-08-10 12:03:09
【问题描述】:

如何在 laravel 中检查日期字符串?

如果字符串没有日期,我想处理这种情况,例如“它不是日期字符串”。

我尝试了它的代码,但它不起作用我有下一个错误:

InvalidArgumentException  : A two digit month could not be found
Data missing

我的代码:

    if (Carbon::createFromFormat('m-d-Y', $rowMatrix[4]) !== false) {
//
}

【问题讨论】:

  • 什么是$rowMatrix 提供它的价值
  • 如果是日期,字符串是否始终采用m-d-Y这种格式?
  • @GaneshGhalame 它只是可以包含日期的字符串。我需要检查日期。
  • @Maraboc 不,但在这种情况下不会发生。有时 $rowMatrix[4] 可以只包含字符串(例如列名),我需要验证它
  • 我的意思是如果它是一个日期你有一种格式?

标签: php laravel validation laravel-5 time


【解决方案1】:

你可以使用try/catch block:

try {
    $date = Carbon::createFromFormat('m-d-Y', $rowMatrix[4])
} catch(InvalidArgumentException $e) {
    $date = 'Not a date';
}

但更好的方法是使用 Laravel 验证 date_format 规则来确保字符串是日期:

'some_date_field' => 'date_format:"m-d-Y"',

【讨论】:

  • if(['sdsdsd' => 'date_format:"m-d-Y"']){ echo "a"; }else{ 回声 "b";为什么它不起作用?我期待“b”,但我有“a”
  • @befreeforlife 你做错了。您可能想先了解Laravel validation 的工作原理。
  • yea.. 所以,在这种情况下,更适合原生 PHP 解决方案 - 比如 try/catch 块
  • @befreeforlife 正如我所说,在可能的情况下使用验证总是更好。如果由于某种原因无法实现,请使用 try/catch 块来捕获异常。
【解决方案2】:

您可以为此使用DateTime

$dateTime = DateTime::createFromFormat('d/m/Y', $rowMatrix[4]);
$errors = DateTime::getLastErrors();
if (!empty($errors['warning_count'])) {
    // Not a date
}

或者你可以这样检查:

if (date('Y-m-d H:i:s', strtotime($rowMatrix[4])) == $rowMatrix[4]){
    // it's a date
}

【讨论】:

  • 如果在原生 PHP 中进行,则很好解决,谢谢。只是我认为存在 Laravel 解决方案
猜你喜欢
  • 2021-09-16
  • 2020-04-01
  • 2011-10-29
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 2014-06-06
  • 2020-12-05
  • 1970-01-01
相关资源
最近更新 更多