Проблема при сравнении 2 дат в javascript

avatar
confused_cat
9 августа 2021 в 06:06
70
3
1

у меня есть 1 проблема, я хочу сравнить две даты между датой рождения и сегодняшним днем, условие: дата рождения должна быть меньше, чем сегодняшняя дата, сначала это сработало, но если я выберу другую дату из средства выбора даты, которая меньше, чем сегодня, его все еще всплывающее предупреждение. И это не нормально. Кто-нибудь знает, почему это произошло?

    function submitForm() {
        
        var dateborn = document.getElementById('dateborn').value;   
        var today = document.getElementById('today').value;
        
        if(dateborn != '')
        {           
            if(dateborn > today)
            {
            swal("Oops", "Date born must less than date today", "error");       
            return false;
            }
        }

            
    }
Источник
Rickard Elimää
9 августа 2021 в 06:10
1

.value возвращает строку. Вы сравниваете две строки, а не две даты.

bluejambo
9 августа 2021 в 06:13
0

Так как я предполагаю, что теперь вам нужно знать, как правильно их сравнивать, преобразуйте строку в дату, например this, и затем сравните.

confused_cat
11 августа 2021 в 07:42
0

спасибо за решение, очень ценю

Ответы (3)

avatar
Adem yalçın
9 августа 2021 в 06:14
1

На вашем месте я мог бы использовать метку времени для сравнения двух дат.

function submitForm() {
        
        var dateborn = document.getElementById('dateborn').value;   
        var today = document.getElementById('today').value;
        const time1 = new Date(dateborn).getTime();
        const time2 = new Date(today).getTime(); // or new Date().getTime();
        if(dateborn != '')
        {           
            if(time1 > time2)
            {
            swal("Oops", "Date born must less than date today", "error");       
            return false;
            }
        }
avatar
Jesper
9 августа 2021 в 06:38
0

Что касается вашего вопроса, почему это произошло. я думаю, что ваш выбор даты не дает дату в формате ISO. если ваше значение отформатировано как: ГГГГ-ММ-ДД (от наибольшего к наименьшему), вы можете сравнить его как строку. Вы можете увидеть это из этой скрипки, которую я сделал: JSfiddle

Ваш выбор даты выглядит так:

<input type="date" id="d2" onChange="change(this)"/>
confused_cat
11 августа 2021 в 06:08
0

спасибо за решение, очень ценю его, ну, кстати, у меня есть только 1 средство выбора даты, которое является датой рождения, в то время как сегодняшнее значение я получаю из скрытого ввода.

Jesper
11 августа 2021 в 06:21
0

@confused_cat Если сегодня действительно только для получения текущей даты ... Почему бы не получить ее из javascript с помощью new Date()?

avatar
Muhammad Nizar
9 августа 2021 в 06:20
0

Попробуйте это

function submitForm() {
    
    var dateborn = document.getElementById('dateborn').value;   
    var today = document.getElementById('today').value;
    
    if(dateborn != '')
    {           
        if(Date(dateborn).getTime() > Date(today).getTime())
        {
        swal("Oops", "Date born must less than date today", "error");       
        return false;
        }
    }

        
}
confused_cat
11 августа 2021 в 07:42
0

спасибо за решение, очень ценю