Phalconで日付の比較バリデーション!開始日と終了日が間違っていないかチェックする方法。

Phalconで日付の比較バリデーションの方法をメモ。

開始日と終了日を入力するフォームがあった場合、開始日が終了日よりも後ろの日付にもしくは、終了日が開始日よりも前の日付になっていないかバリデーション。

ちなみに今回試したPhalconのバージョンはPhalcon5。

Phalconで日付の比較バリデーション

以下は、終了日のフォームにCallbackバリデーションを使用して実現しています。

開始日のフォームでバリデーションしてもOK。

use \Phalcon\Filter\Validation\Validator\Callback;


$endDate = new Date('end_date');
$endDate->setLabel('終了日');
$endDate->addValidators([
    new DateValidator([
        'format' => 'Y-m-d',
        'message' => '終了日に日付を入力してください。'
    ]),
    new Callback([
        'callback' => function ($data) {
            if ($data['start_date'] && $data['end_date']) {
                if (strtotime($data['start_date']) > strtotime($data['end_date'])) {
                    return false;
                }
            }
            return true;
        },
        'message' => '終了日は、開始日以降の日付を入力してください。'
    ])
]);
$this->add($endDate);

バリデーションの解説

new Callback([

Callbackバリデーションを定義しています。

'callback' => function ($data) {

$dataには送信されてきたFormデータがArrayで入っています。。

if ($data['start_date'] && $data['end_date']) {
    if (strtotime($data['start_date']) > strtotime($data['end_date'])) {
        return false;
    }
}
return true;

$data['start_date']が開始日(Y-m-d形式)、$data['end_date']が終了日(Y-m-d形式)。
strtotimeして日付を比較。

バリデーションエラーの場合に「return false」、バリデーションOKの場合は「return true」。