jQuery Datepicker, который поддерживает несколько форматов - PullRequest
7 голосов
/ 03 декабря 2010

Мне интересно, может ли кто-нибудь предложить плагин или решение, которое позволило бы мне использовать плагин jQuery datepicker с несколькими форматами ввода одновременно. Это позволит пользователю вводить дату в любом из указанных форматов. I.e.:

3 31 10
3/31/2010
3-31-10

Мне все равно, будет ли значение искажено в одном из конкретных форматов после того, как пользователь уйдет. Хороший плагин для маскировки ввода может работать и для моей цели, однако этот популярный , похоже, ожидает фиксированного количества элементов для каждого из полей, что не будет работать, потому что я хочу, чтобы пользователь мог вводить 3 или 03 для месяца марта, например.

Ответы [ 5 ]

20 голосов
/ 17 сентября 2013

Прошло много времени с тех пор, как этот вопрос был активным, но если кто-то заинтересован в решении проблемы с использованием более простого средства выбора даты jQueryUI, это можно сделать, настроив метод parseDate:

$.datepicker.inputFormats = ["dd-mm-yy", "dd/mm/yy", "dd mm yy"];//list formats to be accepted here

$.datepicker.originalParseDate = $.datepicker.parseDate;

$.datepicker.parseDate = function (format, value, settings) {
    var date;

    function testParse(format, value, settings) {
        if ( ! date ) {
            try {
                date = $.datepicker.originalParseDate(format, value, settings);
            } catch (Error) {
            }
        }
    }

    testParse(format, value, settings);
    for(var n = 0, stop = $.datepicker.inputFormats ? $.datepicker.inputFormats.length : 0; n < stop; n++){
        testParse($.datepicker.inputFormats[n], value, settings);
    };
    return date;
};
1 голос
/ 03 декабря 2010

Вы можете попытаться интерпретировать несколько форматов ввода и заменить символы в событии blur:

$("#datepicker").datepicker({
    constrainInput: false
}).blur(function() {
    var txt = $(this).val();
    $(this).val(txt.replace(/-| /g, '/'));
});

К сожалению, если я не могу найти способ сделать то же самое, если нажата клавиша Enter.

0 голосов
/ 27 ноября 2018

Улучшение решения от @cage rattler, основанное, в частности, на замечании от @mnsc:

// Accepted additional formats [here, allow for example "4/7/18" for "July 4, 2018"]
$.datepicker.additionalFormats = ["ddmmy", "ddmmyy", "d/m/y", "d/m/yy", "d/mm/y", "dd/m/y", "dd/m/yy", "dd/mm/y"];
// Backup the original parsing function
$.datepicker.originalParseDate = $.datepicker.parseDate;
// New parsing function
$.datepicker.parseDate = function (format, value, settings) {
    // Function that returns a date based on an input format
    function testParse(inputFormat) {
        try {
            // Try to get the date based on the input format
            date = $.datepicker.originalParseDate(inputFormat, value, settings);
            // If the date is right, returns it immediately
            return date;
        }
        catch (Error) {
            // _RD Bad date (this line does nothing but catching the error)
        }
    }
    // Initialise the returned date
    var date;
    // Don't bother with empty values
    if (value !== "0" && value !== "") {
        // Test the main datepicker format (which is an argument of this function)
        testParse(format);
        // If the main datepicker format didn't work, try with the additional ones
        for (var n = 0; n < $.datepicker.additionalFormats.length; n++) {
            testParse($.datepicker.additionalFormats[n]);
        }
    }
    // If the input string couldn't be parsed, returns just the "undefined"-typed variable
    return date;
};

Кроме того, если вы хотите переформатировать ввод при выходе из поля, см. Мой ответ здесьтема: https://stackoverflow.com/a/53499934/5426777

0 голосов
/ 20 апреля 2017

Кейдж Рэттлер ответил, что вы можете переопределить функцию jquery datepicker parseDate для поддержки нескольких форматов. (Я не могу комментировать из-за репутации, но нужно добавить эту информацию независимо от этого)

Я обнаружил, что вам также необходимо переопределить функции formatDate и _possibleChars, если вы устанавливаете переменную формата в DatePicker как список форматов. DatePicker не ожидает список (в моем случае JSON), и вы должны обойти это.

Также учтите, что если вы не переопределите эти два параметра, они не будут вести себя так, как ожидалось. Например. вы не сможете набирать символы, которые есть в вашем списке пользовательских форматов (за исключением первого формата, который хранится в самом указателе даты).

0 голосов
/ 03 декабря 2010

Этот ' Ненавязчивый виджет выбора даты V 5', кажется, принимает несколько форматов. Я быстро проверил все три формата, которые вы указали, и все, кажется, были приняты.

Демо: http://www.frequency -decoder.com / demo / date-picker-v5 /

...