【JS】输入年月日,并输出该日期。(闰年判断)

1 输入输出语句

首先介绍一下JS的输入输出语句:

类型语句说明
输入prompt()在浏览器中弹出输入框,用户可以输入内容
输出alert()在浏览器中弹窗显示内容
document.write()直接在网页页面中输出内容
console.log()在浏览器的控制台输出内容

输入年月日的语句为:

var year = prompt("请输入年:"); 
var month = prompt("请输入月:");
var day = prompt("请输入日:");

注:prompt() 接收的是字符串型,进行运算时需要进行数据类型的转换。👇👇👇

var year = Number(prompt("请输入年:")); 
var month = Number(prompt("请输入月:"));
var day = Number(prompt("请输入日:"));

在此基础上加入一些条件语句,来判断用户输入是否合规,比如判断输入的是否为整数,输入的数字范围以及遇到闰年时2月为29天。

2 判断是否为整数

方法一:首先判断是否为数字,然后再判断是否为整数。

可以使用isNaN()函数判断是否为非数字,如果参数值为 NaN 或字符串、对象、undefined等非数字值则返回 true, 否则返回 false。

1 使用取余运算符判断

任何整数都会被1整除,即余数是0。
num % 1 === 0;

2 使用位或运算符判断

一个整数与0按位或运算可以得到它本身,一个小数与0按位或运算可以得到取整效果。
num | 0 === 0;

在计算机中,小数通常以浮点数的形式存储,浮点数由符号位、指数位和尾数位组成。进行位或运算时,计算机会将浮点数的尾数位和0进行运算,由于尾数位是以二进制形式表示的,与0进行位或运算后,尾数位的所有位都会被置为0,从而实现了取整的效果。

注:位运算只能处理32位以内的数字。

3 运用 Math 对象方法判断

利用整数取整后还等于自己来判断是否是整数:
- Math.ceil(num):对数字num进行上舍入
- Math.floor(num):对数字num进行下舍入
- Math.round(num):对数字num进行四舍五入
- Math.trunc(num):将数字num的小数部分去掉,只保留整数部分

4 运用 parseInt() 函数判断

parseInt(string, radix)函数可解析一个字符串,并返回一个整数

当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

当忽略参数 radix , JavaScript 默认数字的基数如下:
- 如果 string 以 0x 开头,parseInt() 会把 string 的其余部分解析为十六进制的基数。
- 如果 string 以 0 开头,旧的浏览器默认解析为八进制基数。ECMAScript 5,默认解析为十进制的基数。
- 如果 string 以 1 ~ 9 的数字开头,会解析为十进制的基数。

parseInt("10");       //10
parseInt("10.33");    //10
parseInt("34 45 66"); //34
parseInt(" 60 ");     //60
parseInt("40 years"); //40
parseInt("He was 40");//NaN
 
parseInt("010",10);    //10
parseInt("010");       //10
parseInt("010",8);     //8
parseInt("0x010");     //16
parseInt("010",16));   //16

注:
- 只有字符串中的第一个数字会被返回。
- 开头和结尾的空格是允许的。
- 如果字符串的第一个字符不能被转换为数字,那么 parseInt() 会返回 NaN。

※ 方法二:运用Number.isInteger()方法判断整数

isInteger()函数用于检测指定参数是否为整数,如果是整数返回 true,否则返回 false。

注:Number.isInteger()是 ECMAScript 6 (ES6) 新特性。基本上最新的浏览器版本都支持 ES6 (JavaScript 2015),而 IE 11 及更早版本的浏览器不支持。

3 闰年

闰年的精确计算方法(按一回归年365天5小时48分45.5秒):
- 1、普通年份能被 4 整除,且不能被 100 整除的,是闰年。
- 2、世纪年份能被 400 整除的是闰年。
- 3、对于数值很大的年份,既能被 3200 整除,又能被 172800 整除的才是闰年。

if((year%4==0 && year%100!=0) || (year%400==0 && year%3200!=0) || year%172800==0){
	alert(year + "年是闰年。");
}else{
	alert(year + "年是平年。");
}

闰年的二月份有29天,平年的二月份有28天。

4 完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>输入年月日,并输出该日期</title>
</head>
<body>
    <script>
        while(true){  //设置循环,在输入错误时可重新输入。
            var year = Number(prompt("请输入年份"));  //prompt()接收的是字符类型,需要进行类型转换。
            if(year != null){
                if(Number.isInteger(year)){  //用Number.isInteger()方法判断是否为整数
                    if(year > 0){ 
                        while(true){
                            var month = Number(prompt("请输入月份"));
                            if(month != null){
                                if(Number.isInteger(month)){                                     
                                    if(month>=1 && month<=12){
                                        while(true){
                                            var day = Number(prompt("请输入该月的第几天"));
                                            if(day != null){
                                                if(Number.isInteger(day)){
                                                    if(day>=1 && day<=31){
                                                        if(month == 2){
                                                            if(day>=1 && day<=28){
                                                                alert("您输入的年月日为:"+year+"年"+month+"月"+day+"日");
                                                                break;
                                                            }else if(day==30 || day==31){
                                                                alert("2月份没有30号或者31号");
                                                            }else if(day == 29){
                                                                //闰年判断 
                                                                if((year%4==0 && year%100!=0) || (year%400==0 && year%3200!=0) || year%172800==0){
                                                                    alert("您输入的年月日为:"+year+"年"+month+"月"+day+"日");
                                                                    break;
                                                                }else{
                                                                    alert("平年的二月份没有29号");
                                                                }
                                                            }
                                                        }else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
                                                            alert("您输入的年月日为:"+year+"年"+month+"月"+day+"日");
                                                            break;
                                                        }else if(month==4||month==6||month==9||month==11){
                                                            if(day==31){
                                                                alert("4,6,9,11月没有31号");
                                                            }else{
                                                                alert("您输入的年月日为:"+year+"年"+month+"月"+day+"日");
                                                                break;
                                                            }
                                                        }
                                                    }else{
                                                        alert("天数的范围是1-31");
                                                    }
                                                }else{
                                                    alert("请正确的天数!");
                                                }
                                            }else{
                                                alert("请输入一个天数!")
                                            }
                                        }
                                        break;                               
                                    }else{
                                        alert("月份的范围是1-12");
                                    }
                                }else{
                                    alert("请正确的月份!");
                                }
                            }else{
                                    alert("请输入一个月份!");
                            }
                        }
                        break;
                    }else{
                        alert("年份需大于0!");
                    }
                }else{
                    alert("请输入正确的年份!");
                }
            }else{
                alert("请输入一个年份!")
            }    
        }
    </script>
</body>
</html>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值