質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1774閲覧

日付(日数と曜日)の処理のずれ

naonao11

総合スコア97

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/08/21 01:58

行いたいこと

2週間分の日付を表示させたい。

javascript

1var date = new Date (); 2 dateT = ["日","月","火","水","木","金","土"]; 3 for (var i = 0; i < 14; i++) { 4 var day = date.getDate() + i; 5 var dayOfWeek = dateT[date.getDay() + i]; 6 console.log(day); 7 console.log(dayOfWeek); 8 }

このように行うと以下のようなデータが取れます.

21 22 23 24 25 26 27 28 29 30 31 32 33 34 火 水 木 金 土 9 undefined

これはなぜなのでしょうか…ご助力お願いします…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

dateTは7個(0から6)までしかないのに、iを加算することで、dateT[7]になると、undefinedになるのはやむなしかと思います。%を使ってください。

javascript

1var date = new Date (); 2 dateT = ["日","月","火","水","木","金","土"]; 3 for (var i = 0; i < 14; i++) { 4 var day = date.getDate() + i; 5 var dayOfWeek = dateT[(date.getDay() + i) % 7]; 6 console.log(day); 7 console.log(dayOfWeek); 8 }

-- 日付
日付の処理は面倒なので、moment.jsとか使ったほうがいいと思いますが、考え方として。
日付オブジェクトとして操作します。プリミティブに数値だけ取り出すと、月またぎ、週またぎをしないといけなくなる。

javascript

1var date = new Date (); 2 dateT = ["日","月","火","水","木","金","土"]; 3 for (var i = 0; i < 14; i++) { 4 var cur = new Date(date.getFullYear(), date.getMonth(), date.getDate() + i); 5 console.log(cur.getDate()); 6 console.log(dateT[cur.getDay()]); 7 }

投稿2018/08/21 02:00

編集2018/08/21 02:09
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naonao11

2018/08/21 02:04

ありがとうございます! 日付についてなのですが,32日になってしまうのはなぜなのでしょうか。。。
yukihisa

2018/08/21 02:10 編集

曜日と同じですよ。 今日の日付を取って来て、その日に対してiをそのまま足しているので、21+11を単純に行っているだけです。 今日21日だったね。。。
mather

2018/08/21 02:09

現在の日付(21)に数値を足しているだけなので、21 + 11 = 32 という値が出てくるのは当然ですよね?
papinianus

2018/08/21 02:10

naonao11さん、追記しました。 基本的に、日付はDateのまま使いましょう。そうすれば、32日とか33日とかををいい感じに解釈して、次の月の1日、2日にしてくれます。
naonao11

2018/08/21 02:26

なるほど,Dateを二回用いるんですね!ありがとうございます!
papinianus

2018/08/21 02:32

_lemon2003_さんの回答にもあるとおり、2回(というか、2回じゃなくて、15回だと思いますが)使うことは必須ではないです。 Dateというもののまま(数値を足すとかではなく)、Dateの仕組みとして解決するということです(今日+n日の日付を指定してnewして作ってもらう、Dateに。自分で日付そのものや曜日そのものを表す数値を作らない)。 私はsetDateして進めていくのが好きではないので、ループの回数だけnew Dateしています。
guest

0

こっちのほうが仕組みを生かせてすっきりすると思います。

javascript

1var date = new Date(); 2var dateT = ["日","月","火","水","木","金","土"]; 3 4for(var i = 0; i < 14; i++){ 5 var day = date.getDay(); 6 var dayOfWeek = dateT[date.getDay()]; 7 8 console.log(day); 9 console.log(dayOfWeek); 10 11 date.setDate(date.getDate() + 1); // 日付を一日進める 12}

できるだけソースを壊さないようにしました。

date.setDate(date.getDate() + 1) で一日増やすことで、
32 日とか 33 日とか謎の日付が出ません。


コンソールの出力の仕方をかえてみたパターン

javascript

1var table = []; 2 3var date = new Date(); 4var dateT = ["日","月","火","水","木","金","土"]; 5 6for(var i = 0; i < 14; i++){ 7 var day = date.getDate(); 8 var dayOfWeek = dateT[date.getDay()]; 9 10 table.push({day: day, dayOfWeek: dayOfWeek}); 11 12 date.setDate(date.getDate() + 1); // 日付を一日進める 13} 14 15console.table(table);

イメージ説明

投稿2018/08/21 02:26

編集2018/08/21 02:35
_lemon2003_

総合スコア274

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukihisa

2018/08/21 02:32 編集

var day = date.getDay(); を var day = date.getDate(); にしないと日付でなく曜日番号が出てしまいますよ。 と、日付を進めるのはループの最後にしないと今日からにならないですよー
_lemon2003_

2018/08/21 02:32

失礼しました、ミスタイプです。 修正しておきます。
yukihisa

2018/08/21 02:42

修正ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問