Knockout date validation not working correctly

前端 未结 3 1476
粉色の甜心
粉色の甜心 2021-01-22 03:54

I need to validate date in localized format (SK) and it is not possible with knockout validation.

I am using: Durandal 1.2.0 Knockout 2.3.0 Knockout validation https://g

相关标签:
3条回答
  • 2021-01-22 04:08

    Very late for this, but just want to share my updates on @ChoptimusPrime's answer. Not hard-coding the format:

    ko.validation.rules['dateAndFormat'] = {
        validator: function (val, format) {
            return ko.validation.utils.isEmptyVal(val) || moment(val, format).isValid();
        },
        message: 'Please provide a valid date.'
    };
    ko.validation.registerExtenders();
    
    0 讨论(0)
  • 2021-01-22 04:19

    The only working solution I have for now is below. The problem with this validator is that it also validates default(EN) date format as valid, so I have to add a IF to return this as invalid date format.

    var dateValidator = function (val) {
                if (!val)
                    return false;
                if (moment(val, 'DD.MM.YYYY HH:mm').isValid()) {
                    return true;
                }
                else
                    return false;
            };

    var startDate = ko.observable().extend({ validation: { validator: dateValidator, message: 'Start of task is not in correct format.' } });

    0 讨论(0)
  • 2021-01-22 04:35

    A little late by why not... The date rule does seem a bit too permissive for my uses as well. If you like moment but want something cleaner for the caller, add your rule to the validation.rules object:

    ko.validation.rules['simpleDate'] = {
        validator: function (val, validate) {
            return ko.validation.utils.isEmptyVal(val) || moment(val, 'MM/DD/YYYY').isValid();
        },
        message: 'Invalid date'
    };
    

    And then use it like:

    var someDate= ko.observable().extend({ simpleDate: true });
    
    0 讨论(0)
提交回复
热议问题