0

用户假设输入日期并根据输入的日期代码确定该特定日期是一周中的哪一天?

代码成功识别星期几,识别每个月有31天,所以我输入2月31日,简单年份自动识别为3月3日,闰年自动识别为3月2日!如果我输入一些乱码,假设 2019-15-34 它返回为 NaN!

我为每个月设置了条件,如果月份是 1 月,最大天数不应超过 31,如果月份是 2 月,则最大天数不应超过 28,如果年份简单,依此类推。之后我设置警报以显示消息“您的数据无效!请输入有效数据!” 并设置此后继续返回最终用户这次重新输入数据的有效日期。如果日期有效(假设月份不大于 12,日期不大于 31),则假设显示消息“OK!您的数据有效!” 以及继续执行并退出 if 语句的代码!

但是很明显,即使我输入了一些没有意义的日期,比如 2019-15-15,代码也不会返回“您的数据无效!请输入有效数据!”,但无论我输入什么,它都会出现“好的!你的日期是有效的!”。

出了什么问题,为什么 if 语句不能识别日期和月份格式并且不能正确执行代码?

这是代码:

var flag = false;
while(!flag){
    var anydate = prompt('Enter any date in format yyyy-mm-dd', anydate);
    anydate = new Date(anydate);
    var dd = anydate.getDate();
    var mm = (anydate.getMonth()+1);
    var yyyy = anydate.getFullYear();
    if(((mm<1)||(mm>12)||((mm===1)&&(dd>31))||((mm===2)&&(dd>28))||((mm===3)&&(dd>31))|| ((mm===4)&&(dd>30))||((mm===5)&&(dd>31))||((mm===6)&&(dd>30))||((mm===7)&&(dd>31))||((mm===8)&&(dd>31))||((mm===9)&&(dd>30))||((mm===10)&&(dd>31))||((mm===11)&&(mm>30))||((mm===12)&&(dd>31)))){
        alert('Your data is invalid! Enter valid date please!');
        continue;
        flag = false}else{
        alert('OK! You can continue with process!');
        break;
    };
};

var weekday = new Array(7);
weekday[0] = "Sunday";
weekday[1] = "Monday";
weekday[2] = "Tuesday";
weekday[3] = "Wednesday";
weekday[4] = "Thursday";
weekday[5] = "Friday";
weekday[6] = "Saturday";

console.log(weekday[anydate.getDay()]);
console.log(anydate.getMonth()+1);
console.log(anydate.getDate());
console.log(anydate.getFullYear());
a = anydate
anydate = mm + '-' + dd + '-' + yyyy;
console.log(anydate);
4

2 回答 2

0

我建议你不要乱搞日期——有许多好的库可以让你像春风一样轻松。

在这个片段中,我使用了 DayJS

const simpleDate = dayjs('1970-01-01')
const overflowDate = dayjs('1970-15-43')

console.log(simpleDate.format('YYYY-MM-DD'), overflowDate.format('YYYY-MM-DD'))

console.log(simpleDate.format('ddd')) // expected: Thu
console.log(simpleDate.format('dddd')) // expected: Thursday
console.log(simpleDate.format('MMM')) // expected: Jan
console.log(simpleDate.format('MMMM')) // expected: January
console.log(simpleDate.format('YY')) // expected: 70
console.log(simpleDate.format('YYYY')) // expected: 1970
<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>

于 2020-12-29T20:51:24.353 回答
0

我终于找到了答案,基本上问题是while循环中的anydate = new Date(anydate)!我没有执行 anydate = new Date(anydate) 会产生日期格式而无法对其进行划分,而是将 anydate 变量划分为一个数组变量,该变量由三个值组成,它们都是字符串格式。我只是将这些字符串格式的值转换为数字格式,以便能够比较它们并将它们放入 if 语句中!因此,我没有将不可能的日期格式分开,而是指定日期变量的格式假设为 yyyy-mm-dd 而不将其定义为日期格式变量!它使 if 语句能够识别数组中的每个特定值并比较它们并拒绝不正确的值,无论是按数字还是按类型。在 while 循环之外,我以日期格式定义了 anydate 变量,此后我执行了以下过程。代码如下:

var flag = false;
while(!flag){
    var anydate = prompt('Enter the date!', anydate);
    let parts = anydate.split('-');
    yyyy = Number(parts[0]);
    mm = Number(parts[1]);
    dd = Number(parts[2]);
if ((yyyy<0)||(mm<1)||(mm>12)||(dd>31)||(typeof(anydate)==='undefined')||(yyyy%1!==0)||(mm%1!==0)||(dd%1!==0)||((mm===2)&&(dd>29))||((mm===4)&&(dd>30))||((mm===6)&&(dd>30))||((mm===9)&&(dd>30))||((mm===11)&&(dd>30))){
    alert('Your date is invalid! Please enter valid date!');
    continue;
    flag = false;
}else{
    alert('OK! You can continue with process!');
    break;
};
}
anydate = new Date(anydate);
var weekday = new Array(7);
    weekday[0] = "Sunday";
    weekday[1] = "Monday";
    weekday[2] = "Tuesday";
    weekday[3] = "Wednesday";
    weekday[4] = "Thursday";
    weekday[5] = "Friday";
    weekday[6] = "Saturday";

    console.log(weekday[anydate.getDay()]);
    console.log(anydate.getMonth()+1);
    console.log(anydate.getDate());
    console.log(anydate.getFullYear());
    console.log(anydate);
于 2020-12-30T21:08:14.730 回答