2017-07-03 11 views
0

私はJavascript(Vue JS)を使ってカレンダーを作成しています。月の日数を得るのに役立つこの小さな方法があります。JSカレンダー2日短

daysInYearMonth(y,m){ 
    return new Date(y, m, 0).getDate() 
} 

私がconsole.logの場合、私は7月として31になります。ただし、この値を使用する時間が来たとき:

this.days = [...Array(this.daysInYearMonth(this.year, 
    this.month)).keys()] 
} 

I console.log this.days and get 29 days、two short。私が単に2つを追加しようとすると、他の月はオフになります。ここに私のCodePenがあります。

注:私はMoment.jsを意図的に使用していません。私はそれが良いと同意しますが、チームはVueとvanilla JSだけを使うことに決めました。

+0

リモートサイトだけでなく、ここにコードを掲載してください。 [Stack Snippets](https://stackoverflow.blog/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/)を使用して実行可能にすることができます。 – Barmar

+0

@Barmar私はこれがすべて関連コードだと信じています。しかし、リンクのコードが悪くなっても価値があるように、質問で実行可能なコードを持つことの価値を見ています。私はスニペットを作成する、私はこの機能を認識していない、ありがとう! – Auzy

+1

'new Date()。getMonth()'は、今日は6です.Array(x)はゼロになります。 – Bert

答えて

0

daysInYearMonth()あなたが求めている月の前の日数が返されます。日付に0の日を使用すると、その前の月の最終日を意味します。そのため、31ではなく、30が7月に取得されます。今月の最終日を取得するには、次の月を使用する必要があります。

daysInYearMonth(y,m){ 
    return new Date(y, m+1, 0).getDate() 
} 

次の問題は、配列のキーが0で始めるということですが、数ヶ月の日は1から始まります。したがって、Array(this.daysInYearMonth(this.year, this.month)).keys()を実行すると、1から31ではなく0から30に配列が返されます。これを修正する最も簡単な方法は、配列でゲームをプレイするのではなく、1で始まるループを書くことです。

let lastday = this.daysInYearMonth(this.year, this.month); 
this.days = []; 
for (let d = 1; d <= lastday; d++) { 
    this.days.push(d); 
} 
0
  • まず第一に:return new Date(y, m, 0).getDate()

0は前の月の最後の日を取るようあなたは、M + 1を使用する必要があります(http://www.w3resource.com/javascript-exercises/javascript-date-exercise-3.phpを参照)

  • 第二:

this.daysはゼロベースですが、1ヶ月の日数はゼロです。したがって、1-31の代わりに0-30までカウントします。

私はこれがあなたを助けてくれることを願っています。ご挨拶