Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 20.07.2016, 17:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

валидация даты
Master_Sergius,
function validate_date(date) {
    var str = date.trim().split("/");
    if (str.length == 3) {
        str = new Date(str[2], str[0] - 1, str[1], 0, 0, 0);
        if (!str) return false;
        str = [("0" + (str.getMonth() + 1)).substr(-2), ("0" + str.getDate()).substr(-2), str.getFullYear()].join("/");
        return str === date.trim()
    }
    return false
};
alert(validate_date('01/21/2015')); //true  mm/dd/yyyy
alert(validate_date('40/40/2015')); // false
Ответить с цитированием
  #12 (permalink)  
Старый 20.07.2016, 17:37
Аспирант
Отправить личное сообщение для Master_Sergius Посмотреть профиль Найти все сообщения от Master_Sergius
 
Регистрация: 29.07.2014
Сообщений: 42

Сообщение от рони Посмотреть сообщение
Master_Sergius,
function validate_date(date) {
    var str = date.trim().split("/");
    if (str.length == 3) {
        str = new Date(str[2], str[0] - 1, str[1], 0, 0, 0);
        if (!str) return false;
        str = [("0" + (str.getMonth() + 1)).substr(-2), ("0" + str.getDate()).substr(-2), str.getFullYear()].join("/");
        return str === date.trim()
    }
    return false
};
alert(validate_date('01/21/2015')); //true  mm/dd/yyyy
alert(validate_date('40/40/2015')); // false
Неплохой вариант! Я ещё такую штуку рассматриваю:
^(([0]?[1-9]|1[0-2])/([0-2]?[0-9]|3[0-1])/[1-2]\d{3}) (20|21|22|23|[0-1]?\d{1}):([0-5]?\d{1})$


В общем, суть понял. Спасибо.
Ответить с цитированием
  #13 (permalink)  
Старый 20.07.2016, 18:30
Аспирант
Отправить личное сообщение для Master_Sergius Посмотреть профиль Найти все сообщения от Master_Sergius
 
Регистрация: 29.07.2014
Сообщений: 42

Сообщение от рони Посмотреть сообщение
Master_Sergius,
function validate_date(date) {
    var str = date.trim().split("/");
    if (str.length == 3) {
        str = new Date(str[2], str[0] - 1, str[1], 0, 0, 0);
        if (!str) return false;
        str = [("0" + (str.getMonth() + 1)).substr(-2), ("0" + str.getDate()).substr(-2), str.getFullYear()].join("/");
        return str === date.trim()
    }
    return false
};
alert(validate_date('01/21/2015')); //true  mm/dd/yyyy
alert(validate_date('40/40/2015')); // false
Вот это меня натолкнуло на такую мысль и теперь вроде всё работает (до идеала ещё далеко, но всё же):

function validate_date(date_str, date_format){
    /* Validate date or datetime due to specified format
     *
     * Example: date_str "01/01/2016" valid with format "MM/dd/YYYY",
     *          but invalid with format "MM/dd/YYYY hh:mm:ss"
     *
     * NOTE: MM/dd/YYYY and M/d/Y are equivalent, hh:mm:ss equals to h:m:s
     */
    date_str = date_str.trim();
    var date_parsed = Date.parse(date_str);
    if (!isNaN(date_parsed)) {
        date_parsed = new Date(date_parsed);
    } else {
        return false;
    }
    // build date from components according to format
    date_format = date_format.replace(/M+/g, ("0" + (date_parsed.getMonth() + 1)).substr(-2));
    date_format = date_format.replace(/d+/g, ("0" + date_parsed.getDate()).substr(-2));
    date_format = date_format.replace(/Y+/g, date_parsed.getFullYear());
    date_format = date_format.replace(/h+/g, ("0" + date_parsed.getHours()).substr(-2));
    date_format = date_format.replace(/m+/g, ("0" + date_parsed.getMinutes()).substr(-2));
    date_format = date_format.replace(/s+/g, ("0" + date_parsed.getSeconds()).substr(-2));
    console.log(date_parsed);
    console.log(date_format);
    return date_str == date_format
};

alert(validate_date('02/30/2016', 'MM/dd/YYYY'));
alert(validate_date('02/28/2016', 'MM/dd/YYYY'));

Последний раз редактировалось Master_Sergius, 21.07.2016 в 11:14. Причина: добавка алертов для запуска
Ответить с цитированием
  #14 (permalink)  
Старый 20.07.2016, 19:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от Rise
а то получится 30 февраля валидной датой...
не получится, можешь проверить
Ответить с цитированием
  #15 (permalink)  
Старый 20.07.2016, 19:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Rise,
function validate_date(date) {
    var str = date.trim().split("/");
    if (str.length == 3) {
        str = new Date(str[2], str[0] - 1, str[1], 0, 0, 0);
        if (!str) return false;
        str = [("0" + (str.getMonth() + 1)).substr(-2), ("0" + str.getDate()).substr(-2), str.getFullYear()].join("/");
        return str === date.trim()
    }
    return false
};
alert(validate_date('02/30/2015')); //false  mm/dd/yyyy
alert(validate_date('02/28/2015')); //true  mm/dd/yyyy
Ответить с цитированием
  #16 (permalink)  
Старый 20.07.2016, 20:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от Rise
рони, наверное строка 5 бесполезна?
не вижу вариантов, если str не дата вернуть false , что не так?
Ответить с цитированием
  #17 (permalink)  
Старый 20.07.2016, 20:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Валидация даты
Rise,
function validate_date(date) {
    var str = date.trim().split("/");
    if (str.length == 3) {
        str = new Date(str[2], str[0] - 1, str[1], 0, 0, 0); alert(str)
        if (!str) return false;
        str = [("0" + (str.getMonth() + 1)).substr(-2), ("0" + str.getDate()).substr(-2), str.getFullYear()].join("/");
        return str === date.trim()
    }
    return false
};
alert(validate_date('02/дд/2015')); //  mm/dd/yyyy

Последний раз редактировалось рони, 14.04.2018 в 15:48.
Ответить с цитированием
  #18 (permalink)  
Старый 20.07.2016, 20:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Валидация даты
Rise,
уговорил
дополненный вариант
function validate_date(date) {
    var str = date.trim().split("/");
    if (str.length == 3) {
        str = new Date(str[2], str[0] - 1, str[1], 0, 0, 0);
        if (str == 'Invalid Date') return false;
        str = [("0" + (str.getMonth() + 1)).substr(-2), ("0" + str.getDate()).substr(-2), str.getFullYear()].join("/");
        return str === date.trim()
    }
    return false
};
alert(validate_date('02/дд/2015')); //false  mm/dd/yyyy
alert(validate_date('02/30/2015')); //false  mm/dd/yyyy
alert(validate_date('02/29/2016')); //true  mm/dd/yyyy

Последний раз редактировалось рони, 14.04.2018 в 15:48.
Ответить с цитированием
  #19 (permalink)  
Старый 20.07.2016, 20:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Rise,
спасибо за науку!!! плюсануть не могу
Ответить с цитированием
  #20 (permalink)  
Старый 21.07.2016, 11:15
Аспирант
Отправить личное сообщение для Master_Sergius Посмотреть профиль Найти все сообщения от Master_Sergius
 
Регистрация: 29.07.2014
Сообщений: 42

Я добавил алерты и кнопочку запустить, прошу проверить.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск