为什么月份+多了一个1?

为什么月份+多了一个1?

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>员工合同到期时间</title>
</head>
<body>
<script>
    var useryears=prompt("请输入员工的入职年份"),
        userMoth=prompt("请输入员工的入职月份"),
        userDate=prompt("请输入员工的入职时间");
        function timeGo(years,moth,date){
            var today=new Date(years,moth,date);
            document.write("该员工入职时间是:"+today.getFullYear()+"-"+(today.getMonth()+1)+"-"+today.getDate()+"<br>")  
            document.write("该员工合同到期时间是:"+(today.getFullYear()+3)+"-"+(today.getMonth()+1)+"-"+today.getDate())
        }
        timeGo(useryears,userMoth,userDate)
    //?代码补充
</script>
</body>
</html>

获取的月份不是0-11吗 不是要加1才正确吗?对比了一下其他同学的代码+1获取的月份是正确的,为什么我+1获取的月份会多了1.另外代码中还有别的问题吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕码 2020-01-13 09:50:16

同学你好,针对你的问题如下解答:

(1)在没有添加parseInt方法之前,通过prompt获取的年、月、日都是字符串类型;

(2)在同学的代码中,today.getFullYear()+3 年份和“3”没有进行拼接,而是进行了相加,如下

http://img1.sycdn.imooc.com//climg/5e1bcac9093218fb10470045.jpg

输入2000年:

http://img1.sycdn.imooc.com//climg/5e1bcadc098067e302940067.jpg

(3)经过老师的修改:将3添加在参数years中了(为了避免getFullYear方法的影响),在回复中一中可见:

http://img1.sycdn.imooc.com//climg/5e1bcb0809222b1d10580127.jpg

这样,就会产生年份和“3”拼接的情况:

http://img1.sycdn.imooc.com//climg/5e1bcc2b09742ede10240094.jpg

比如说输入2000:

http://img1.sycdn.imooc.com//climg/5e1bcc5a09c5404803120069.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

好帮手慕码 2020-01-12 19:00:46

同学你好,针对你的问题如下解答:

(1)prompt这里提取输入的内容,类型是字符串,可以通过typeof测试一下;

http://img1.sycdn.imooc.com//climg/5e1af45609d90d2604490091.jpg

http://img1.sycdn.imooc.com//climg/5e1af45a09f3628f01040028.jpg

(2)"月份在没有修改parseInt转换数字之前",请问是这里吗?

http://img1.sycdn.imooc.com//climg/5e1af62509ba5b1507250091.jpg

因为是和today.getMonth()方法相加,会自动转换为月份。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 陈立天 #1
    在之前typeof 的结果年和月都是字符串呀,也就是获取月份那里和年同样是在没有对prompt的内容转number之前呀。老师说的today.getMonth()方法会实现相加。那today.getFullYear()方法相加为什么就是连接3而不是相加3了呢?
    2020-01-12 19:33:42
好帮手慕码 2020-01-12 15:37:48

同学你好,从结果上来看,是不对的,如下(输入2000,2,29):

http://img1.sycdn.imooc.com//climg/5e1ac732090d5f4702920060.jpg

建议修改如下:

(1)用户输入的时间就是入职时间,建议原样输出:

http://img1.sycdn.imooc.com//climg/5e1ac76909fdebbd12010059.jpg

(2)由于系统返回的月份为0(实际的一月份)~11(实际的十二月份),当输入12月,系统返回的日期是下一年的0月。故需要在设置月份时,先减去1。当在页面中输出日期的时候,再加上1:

http://img1.sycdn.imooc.com//climg/5e1ac8e00931dbd411890136.jpg

(3)使用加运算的时候,字符串会与其他类型默认进行字符串拼接,如下效果:

http://img1.sycdn.imooc.com//climg/5e1ac947092950e003000075.jpg

可以通过parseInt方法将字符串转换成数字。建议修改如下:

http://img1.sycdn.imooc.com//climg/5e1acc6109e40e1d05420098.jpg

整体修改如下:

http://img1.sycdn.imooc.com//climg/5e1acd0009f40f7d12330284.jpg

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 陈立天 #1
    老师说的(3)使用加运算的时候,字符串会与其他类型默认进行字符串拼接。代码没有修改之前,prompt这里提取输入的都是字符串么?这里想问个问题为什么只有在输出年份的时候才会和+3实现拼接,而月份那里在没有修改parseInt转换数字之前月份的输出结果并不是拼接的效果而是相加呢?
    2020-01-12 15:59:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师