我正在使用Javascript(Vue JS)构建日历。我有这个小方法来帮助获得这个月的日子:
exec()
如果我在console.log上面,那么我7月就得到了31。但是,当需要使用此值时:
daysInYearMonth(y,m){
return new Date(y, m, 0).getDate()
}
我console.log this.days并获得29天,两个短。如果我只是尝试添加两个,那么其他几个月都会关闭。这是我的CodePen。
注意:我故意不使用Moment.js,即使我同意它更好,但团队决定只使用Vue和vanilla JS。
答案 0 :(得分:0)
return new Date(y, m, 0).getDate()
你应该使用m + 1,因为0代表上个月的最后一天(见http://www.w3resource.com/javascript-exercises/javascript-date-exercise-3.php)
this.days
从零开始,但一个月内没有。所以,你从0到30而不是1-31。
我希望这会帮助你。迎接
答案 1 :(得分:0)
daysInYearMonth()
返回您要求的月份之前一个月的天数。在日期中使用日0
时,表示该日期前一个月的最后一天。这就是为什么你在7月份获得30
而不是31
。因此,要获得当月的最后一天,您需要使用下个月。
daysInYearMonth(y,m){
return new Date(y, m+1, 0).getDate()
}
下一个问题是数组键从0
开始,但是几个月中的几天从1
开始。因此,当您执行Array(this.daysInYearMonth(this.year,
this.month)).keys()
时,它会返回从0
到30
而不是1
到31
的数组。解决此问题的最简单方法是编写一个以1
开头的循环,而不是使用数组进行游戏。
let lastday = this.daysInYearMonth(this.year, this.month);
this.days = [];
for (let d = 1; d <= lastday; d++) {
this.days.push(d);
}