【问题标题】:Laravel 5.1 Date_Format Validator Fails on Y-m-d FormatLaravel 5.1 Date_Format 验证器在 Y-m-d 格式上失败
【发布时间】:2015-10-12 18:46:50
【问题描述】:

我开始使用 Request 对象来验证传入的帖子数据,并且我已经看到其他人如何使用 date_format 的示例,但即使我使用的是使用 PHP 的 date_parse_from_format 时通过的格式:

print_r(date_parse_from_format('Y-m-d','2015-07-27'));

输出

更新:它们是 date_parse_from_format 中的警告,但我不明白为什么,因为它反映了格式。

{
    "year": 2015,
    "month": 2,
    "day": 30,
    "hour": false,
    "minute": false,
    "second": false,
    "fraction": false,
    "warning_count": 1,
    "warnings": {
      "10": "The parsed date was invalid"
    },
    "error_count": 0,
    "errors": [],
    "is_localtime": false
}

验证器

public function rules()
{
    return [
        'rental_id' => 'required|exists:rentals,id',
        'start_at' => 'required|date_format:Y-m-d',
        'end_at' => 'required|date_format:Y-m-d'
    ];
}

我使用 PostMan 发送的有效载荷为:

rental_id = 1 as text
start_at = 2015-02-30 as text
end_at = 2015-02-30 as text

它会抛出 NotFoundHttpException,但如果我在验证器请求中注释掉 start_at 和 end_at,它会通过,并使用正确的有效负载进入我的控制器操作:

{
    "rental_id": "1",
    "start_at": "2015-02-30",
    "end_at": "2015-02-30"
}

【问题讨论】:

  • 你转储$request->get('start_at') 看看有什么价值吗?
  • 试试'start_at' => 'required|date_format:"Y-m-d"',
  • 嗨@ceejayoz,来自 PostMan 的响应显示了传入负载的值。
  • 嗨@KiranLM,好主意,但没用。
  • @ceejayoz,你说对了一半,传入的请求数据有些有趣,显然过去不可能。我将我的 PostMan 请求更改为 2015-07-30,它可以正常工作。

标签: laravel laravel-validation laravel-5.1 laravel-request


【解决方案1】:

显然,date_format 验证失败,因为我随机选择 2015-02-30 来测试我的 API,但那一天不存在,因为那是 2 月 30 日......哦,太可惜了,浪费了时间。感谢@ceejayoz 的所有帮助!!!

【讨论】:

  • 嗯,这很奇怪。底层代码应该适用于未来的日期。
  • validateDateFormat 的代码可以执行 date_parse_from_format('Y-m-d', '2015-07-30')date_parse_from_format('Y-m-d', '2015-07-10') ,当我手动尝试它们时,它们都不会出现错误或警告。
  • 嗨@ceejayoz,你是对的,我随机选择了一个日期只是为了测试,我设法随机选择了唯一只有 28 天的月份。叹息!
  • 啊哈! 2 月 30 日让你大吃一惊。
猜你喜欢
  • 2018-03-02
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 2021-03-09
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多