mht
mht

Reputation: 103

Laravel 5.2 validation: date_format:Y.m.d not working

I try to validate a POST request.

The format is: d.m.Y (12.1.2017) My rule is required|date_format:d.m.Y for this field.

I get this error message:

InvalidArgumentException in Carbon.php line 425:
Unexpected data found.
Unexpected data found.
Data missing

If I change the . to - or even / it is working -> POST data changed before to match the rule.

I need the German format for this.

edit: My validation rules:

public function rules()
{
    return  [
        'title' => 'required|max:255',
        'expiration_date' => 'required|date_format:d.m.Y',
        //'description' => 'required',
        'provision_agent' => 'required|integer|between:0,100',
        'discount_consumer' => 'required|integer|between:0,100',
        'quota' => 'required|integer',
    ];
}

Upvotes: 6

Views: 10174

Answers (4)

Gras Double
Gras Double

Reputation: 16383

If you don't succeed solving the issue otherwise, you can still use a custom validation rule:

Validator::extend('date_dmY', function ($attribute, $value) {
    $format = 'd.m.Y';
    $date = DateTime::createFromFormat($format, $value);
    return $date && $date->format($format) === $value;
}, 'optional error message');

The extra check $date->format($format) === $value is to avoid erroneously accepting out-of-range dates, e.g. "32.01.2017". See this comment on php.net.

Once the custom validation rule has been defined, you can use it like so:

public function rules() {
    return [
        'expiration_date' => 'required|date_dmY',
    ];
}

Upvotes: 0

vijaykumar
vijaykumar

Reputation: 4806

Wrap your Format should work i just tried with 5.2 it's working fine.

public function rules()
{
    return  [
        'title' => 'required|max:255',
        'expiration_date' => 'required|date_format:"d.m.Y"',
        //'description' => 'required',
        'provision_agent' => 'required|integer|between:0,100',
        'discount_consumer' => 'required|integer|between:0,100',
        'quota' => 'required|integer',
    ];
}

But the error what you added in question InvalidArgumentException in Carbon.php line 425: it seems something else my guess you are using expiration_date some where in controller or model like this with Carbon

 echo Carbon::createFromFormat('Y-m-d', '12.1.2017');

You should try something like this

echo Carbon::parse('12.1.2017')->format('Y-m-d')

Upvotes: 5

Rahul
Rahul

Reputation: 18577

Try like this,

public function rules()
{
    return  [
        'title' => 'required|max:255',
        'expiration_date' => 'date_format:"d.m.Y"|required', // I have changed order of validation
        //'description' => 'required',
        'provision_agent' => 'required|integer|between:0,100',
        'discount_consumer' => 'required|integer|between:0,100',
        'quota' => 'required|integer',
    ];
}

Hope this will solve your problem.

Upvotes: 0

Serg Chernata
Serg Chernata

Reputation: 12400

Wrap your format into quotes:

'date_format:"d.m.Y"'

Upvotes: 0

Related Questions