teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

おまけのおまけ追加

2020/02/14 03:40

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
File without changes

4

おまけのおまけ追加

2020/02/14 03:40

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -107,4 +107,25 @@
107
107
  // 完全に存在しない不正な日付も繰り上がったりするので
108
108
  console.log(new Date(2000, 3, 32)); // Tue May 02 2000 00:00:00 GMT+0900 (日本標準時)
109
109
  console.log(isValidDate(2000, 4, 32)); // false
110
- ```
110
+ ```
111
+
112
+ ---
113
+
114
+ 【おまけのおまけ】 エラーが出たら消えないのでそこも分かる方がいらっしゃったら教えて頂きたいです。
115
+
116
+ JavaScriptが出来る事は
117
+ HTMLの構造をA→Bに書き換えることだけです。
118
+ 壊したらもう元には戻りません。
119
+
120
+ これはJavaScriptが命令型言語なので指示待ち人間なわけですよ。
121
+ 指示を出すからには、「妥当な日付になったら戻れ!」という指示が必要になります。
122
+
123
+ エラーを表示する為に`elm.innerHTML = "エラーですよ"`みたいな事をやってますよね?
124
+ だから日付が妥当だった場合は、自らの手で`elm.innerHTML = ""`と消さなければなりません。
125
+ これはjQueryへ移行しても記述が簡素になってちょっと楽になる程度で変わりません。
126
+
127
+ 最終的にはテンプレートを渡して、
128
+ 「Aの変数を見て、Aの変数が変更されたら勝手に最善の形に書き換わってくれ!」という仕組みを構築するのが終着点です。
129
+ これを実現するのがReactやVue.js等のJSフレームワークを駆使した開発です。
130
+
131
+ 恐らく今後の講義として追加されると思うので楽しみにしてください。

3

おまけのおまけ追加

2020/02/14 03:40

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
File without changes

2

おまけ追加

2020/02/14 03:40

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
File without changes

1

おまけ追加

2020/02/14 03:24

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -70,4 +70,41 @@
70
70
 
71
71
  どちらにせよ、日付を放り込んで
72
72
  正しい日付ですか?と聞いてfalseが帰ってきたら不正な数値と返すだけなので
73
- 後々の処理を考えた時は絶対にライブラリ使う方が良いです。
73
+ 後々の処理を考えた時は絶対にライブラリ使う方が良いです。
74
+
75
+ ---
76
+
77
+ 【おまけ】 カイジくんが本当に欲しいのはこっち
78
+
79
+ > 年月日の入力をチェックしてエラーを出している
80
+
81
+ 閏年なんてどうでも良いんですよ。
82
+ 妥当な日付か否かが知りたいんでしょ?
83
+
84
+ まぁ、これ一択でしょうね。
85
+ 数値へのキャストは[Number](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number)を使いましょう。
86
+
87
+ ```js
88
+ // 文字列を数値にしたい
89
+ console.log(Number("2000")); // 2000
90
+
91
+ function isValidDate(year, month, day) {
92
+ var d = (new Date(year, month - 1, day));
93
+ return year == d.getFullYear()
94
+ && month - 1 == d.getMonth()
95
+ && day == d.getDate();
96
+ }
97
+
98
+ [2400, 2300, 2200, 2004, 2001].forEach(function(year){
99
+ console.log(isValidDate(year, 2, 29));
100
+ });
101
+ // true
102
+ // false
103
+ // false
104
+ // true
105
+ // false
106
+
107
+ // 完全に存在しない不正な日付も繰り上がったりするので
108
+ console.log(new Date(2000, 3, 32)); // Tue May 02 2000 00:00:00 GMT+0900 (日本標準時)
109
+ console.log(isValidDate(2000, 4, 32)); // false
110
+ ```