JS日历短短两天

时间:2017-07-03 20:39:40

标签: javascript vue.js vuejs2

我正在使用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。

2 个答案:

答案 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()时,它会返回从030而不是131的数组。解决此问题的最简单方法是编写一个以1开头的循环,而不是使用数组进行游戏。

let lastday = this.daysInYearMonth(this.year, this.month);
this.days = [];
for (let d = 1; d <= lastday; d++) {
    this.days.push(d);
}