# Laminas\\Validator\\Date Handling for 2019-02-31

**URL:** https://discourse.laminas.dev/t/laminas-validator-date-handling-for-2019-02-31/1750
**Category:** Components & MVC
**Tags:** laminas-form, laminas-validator
**Created:** [July 19, 2020, 4:01pm UTC](https://discourse.laminas.dev/t/laminas-validator-date-handling-for-2019-02-31/1750 "2020-07-19T16:01:59Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![Andy](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@Andy](https://discourse.laminas.dev/u/Andy)
#### Post date: [July 19, 2020, 4:01pm UTC](https://discourse.laminas.dev/t/laminas-validator-date-handling-for-2019-02-31/1750/1 "2020-07-19T16:01:59Z")

</div>

Hello,

I am laminas newbie. I dont find an error constants for this example. How can I handle this?

php \> $dtZone = new DateTimeZone(‘UTC’);  
php \> $dtString = ‘2019-02-31’;  
php \> $dt = new DateTime($dtString, $dtZone);  
php \> echo $dt-\>format(‘Y-m-d’);  
2019-03-03

This example is an input to Form\Element\DateSelect. for this request only!

Andy

---

<div class="post-metadata">

### Author: ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)
#### Post date: [July 20, 2020, 10:35am UTC](https://discourse.laminas.dev/t/laminas-validator-date-handling-for-2019-02-31/1750/2 "2020-07-20T10:35:02Z")

</div>

Hello and welcome to forums! 😃

> [@Andy](#):
>
> I dont find an error constants for this example. How can I handle this?  
> …  
> This example is an input to Form\Element\DateSelect. for this request only!

Unfortunately I don’t know what your goal is.

The form element `Laminas\Form\Element\DateSelect` uses the [`Date` validator](https://docs.laminas.dev/laminas-validator/validators/date/) from laminas-validator. There will you find all supported constants:

> <https://github.com/laminas/laminas-validator/blob/bcd1a368b1d03a1e868c5c6937af9209fe7ae8e2/src/Date.php#L20-L27>

Maybe you can describe exactly what you have in mind then we can better help.

---

<div class="post-metadata">

### Author: ![Andy](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@Andy](https://discourse.laminas.dev/u/Andy)
#### Post date: [July 20, 2020, 10:59am UTC](https://discourse.laminas.dev/t/laminas-validator-date-handling-for-2019-02-31/1750/3 "2020-07-20T10:59:44Z")

</div>

Hello. 🙂

My english is terrible! Sorry about.

I builded a Form\Form and use inside Form\Element\DateSelect.

I see (in html ) Day-Select(01-31), Month-Select(01-12) and Year-Select(configure with max\_year and min\_year),  
It works.  
Unfortunately you can select 31.02.2019 and I see in database 2019-03-03.

I wanto to use in InputFilter:  
‘options’ =\> [  
‘messages’ =\> [  
Validator\Date::ANY\_CONST =\> ‘message’  
]  
}

Greetings

---

<div class="post-metadata">

### Author: ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)
#### Post date: [July 20, 2020, 12:11pm UTC](https://discourse.laminas.dev/t/laminas-validator-date-handling-for-2019-02-31/1750/4 "2020-07-20T12:11:38Z")

</div>

> [@Andy](#):
>
> Unfortunately you can select 31.02.2019 and I see in database 2019-03-03.

Please check which date value the form returns after validation:

```php
if ($form->isValid()) {
   var_dump($form->getData());
}

```

---

<div class="post-metadata">

### Author: ![Andy](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@Andy](https://discourse.laminas.dev/u/Andy)
#### Post date: [July 20, 2020, 8:00pm UTC](https://discourse.laminas.dev/t/laminas-validator-date-handling-for-2019-02-31/1750/5 "2020-07-20T20:00:02Z")

</div>

I forgot to activate validator. sorry!  
But now i get ( after $form-\>isValid() ):  
Array  
(  
[username] =\> test  
[gender] =\> Male  
[email] =\> [test@example.de](mailto:test@example.de)  
[confirm\_email] =\> [test@example.de](mailto:test@example.de)  
[birthday] =\> NULL  
[password] =\> test12345  
[confirm\_password] =\> test12346  
[csrf] =\> dc90606f4a97f0d10ea0c030f83dd3d2-5555be22ef186525e50704a74e6e33b5  
[create\_account] =\> Account anlegen  
)

Validator\NotEmpty should fire an error for birthday or? ☹

---

<div class="post-metadata">

### Author: ![Andy](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@Andy](https://discourse.laminas.dev/u/Andy)
#### Post date: [July 20, 2020, 8:02pm UTC](https://discourse.laminas.dev/t/laminas-validator-date-handling-for-2019-02-31/1750/6 "2020-07-20T20:02:59Z")

</div>

[

```
        'name' => 'birthday',

        'required' => true,

        'filters' => [

            ['name' => Filter\StripTags::class] , # remove html tags

            ['name' => Filter\StringTrim::class] , # remove empty spaces               

        ],

        'validators' => [

            [ 

                'name' => Validator\NotEmpty::class,

                'options' => [

                    'messages' => [

                        Validator\NotEmpty::INVALID => 'invalid',

                        Validator\NotEmpty::IS_EMPTY => 'Empty',

                    ]

                ]

            ],

            [

                'name' => Validator\Date::class,

                'options' => [

                    'format' => 'Y-m-d',

                    'messages' => [

                        Validator\Date::FALSEFORMAT => 'Birthday has wrong format',

                        Validator\Date::INVALID_DATE => 'Date ist not valid',

                        Validator\Date::INVALID => 'Invalid'

                    ],

                ],

            ],

        ],

    ]

```

I inserted, what I found.

---

<div class="post-metadata">

### Author: ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)
#### Post date: [July 21, 2020, 7:27am UTC](https://discourse.laminas.dev/t/laminas-validator-date-handling-for-2019-02-31/1750/7 "2020-07-21T07:27:06Z")

</div>

Here a short example to demonstrate different values for validation:

```php
class ExampleForm extends Laminas\Form\Form
    implements Laminas\InputFilter\InputFilterProviderInterface
{
    public function init() : void
    {
        $this->add(
            [
                'name' => 'birthday',
                'type' => Laminas\Form\Element\DateSelect::class,
            ]
        );
    }

    public function getInputFilterSpecification() : array
    {
        return [
            [
                'name' => 'birthday',
                'required' => true,
            ],
        ];
    }
}

```

Validation with invalid value:

```php
$form = new ExampleForm();
$form->init();

$form->setData(
    [
        'birthday' => '',
    ]
);
var_dump($form->isValid()); // false
var_dump($form->getMessages()['birthday']['isEmpty']); // "Value is required and can't be empty"

```

With valid values:

```php
$form = new ExampleForm();
$form->init();

$form->setData(
    [
        'birthday' => '2020-07-01',
    ]
);
var_dump($form->isValid()); // true

```

```php
$form = new ExampleForm();
$form->init();

$form->setData(
    [
        'birthday' => [
            'year' => '2020',
            'month' => '07',
            'day' => '01',
        ],
    ]
);
var_dump($form->isValid()); // true

```

Maybe it will help to find your problem.

---

<div class="post-metadata">

### Author: ![Andy](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@Andy](https://discourse.laminas.dev/u/Andy)
#### Post date: [July 22, 2020, 1:34pm UTC](https://discourse.laminas.dev/t/laminas-validator-date-handling-for-2019-02-31/1750/8 "2020-07-22T13:34:46Z")

</div>

Thanks for the example 🙂
