@SemenyukS

Как решить эту задачу?

Дана дата из трех чисел (день, месяц и год). Вывести yes, если такая дата существует (например, 12 02 1999 - yes, 22 13 2001 - no).

var day = +prompt("DAY : ");
        var month = +prompt("MONTH: ");
        var year = +prompt("YEAR: ");
        var flagDay = false;
        var flagMonth = false;
        var flagYear = false;


        if ( 1 <= day <= 30){
            flagDay = true;
        } else {
            flagDay = false;
        }

        if ( 1 <= month <= 12){
            flagMonth = true;
        } else {
            flagMonth = false;
        }

        if (1 <= year <= 2016){
            flagYear = true;
        } else {
            flagYear = false;
        }

        if (flagDay && flagMonth && flagYear){
            document.write(day + ":"+ month + ":"+ year);
        } else {
            document.write("no");
        }


В результате у меня всё равно выводит те месяца и дни, которых не существует( к примеру, 42:1551:5134).
Почему условие не работает ?
  • Вопрос задан
  • 1282 просмотра
Решения вопроса 2
@vshvydky
let stringDate = '12 01 1999';
let parseDate = stringDate.split(' ');

let day = parseInt(parseDate[0], 10);
let month = parseInt(parseDate[1], 10) - 1;
let year = parseInt(parseDate[2], 10);
let d = new Date(year, month, day);
if (day == d.getDate() && month == d.getMonth() && year == d.getFullYear()) {
    console.log(`${stringDate} - YES`);
} else {
    console.error(`${stringDate} - NO`);
}
Ответ написан
Комментировать
ProjectSoft
@ProjectSoft
Front-end && Back-end разработчик
Либо ещё вариант без Date, но с учётом високосного года
https://jsfiddle.net/ProjectSoft/qqw8a8g3/
В примере по умолчанию дата не високосного года 29.02.2015, что является ошибкой.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alsopub
@alsopub
Можно сделать в духе:
var dt = new Date('2010-02-30');
var ok = !isNaN(dt.getDate());

Суть в том, что если дата не существует, то getDate() вернет NaN.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы