JavaScript中的setMonth()方法的bug

  • A+
所属分类:javascript

从英文日期转化中文日期,月份总会有“六月”变为“七月”,“九月”变为“十月”。在本地反复测试后,发现一个规律:只要setMonth()的参数月份对应的天数小于31天时就会变为下一个月。
原因是:因为当前月份是31天,而设置的月份小于31天,就会把日期顺延。在setMonth的说明是这样的:
setMonth 方法
设置 Date 对象中用 本地时间表示的月份值。
dateObj.setMonth(numMonth[, dateVal])
参数
dateObj
必选项。任意 Date 对象。
numMonth
必选项。一个等于月份值的数值。
dateVal
可选项。一个代表日期的数值。如果没有提供此参数,那么将使用通过调用 getDate 方法而得到的数值。

所以,从对dataVal参数的说明可以看出,在设置月份的同时,使用getDate获取日期,并使用得到的日期值设置了日期。于是就会发生月份顺延的情况。

解决方法:
1、设置月份时,将日期设为1,记setMonth(month, 1),当然也可以在setMonth之前先调用setDate()设置日期;
2、在初始化Date对象时,就指定一个日期,也就是使用:dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]) 的形式。
3、也可以使用setFullYear()同时设置年、月、日,即setFullYear(numYear[, numMonth[, numDate]])。
---------------------
作者:zz_chst
来源:CSDN
原文:https://blog.csdn.net/zz_chst/article/details/81316578
版权声明:本文为博主原创文章,转载请附上博文链接!

weinxin
我的微信
这是我的微信扫一扫
kiven

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: