🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

解決済

3回答

524閲覧

javascript new Date()の引数について。他

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2019/10/31 16:58

編集2019/10/31 17:37

すいません。
プログラミングの勉強をしており、javascriptのカレンダーを作るプログラムを改変解析しているのですが、
現在の知識では、わからない点があり、教えて欲しいです。
宜しくお願いします。

var day=new Date(Year,Month,1); // (1)ここの引数の意味がわかりません。

mt[1]=29; // (2)mt[1]=29が何をしているのか意味がわかりません。

追伸

回答を頂き、(2)について、うるう年であると理解できました。

(Year,Month,1);の箇所を、(Year,Month,2);にすると、カレンダーの日付の表示箇所が右に1つずれました。
また(Year,Month,0);にすると、カレンダーの日付のの表示箇所が左に1つずれました。

何故でしょうか?

<!DOCTYPE html> <html> <head> <script type="text/javascript"> var Year,Month; function init() { var today=new Date(); Year=today.getFullYear(); Month=today.getMonth(); mannen(); } function back() { if (Month==0){ // 1月 Year--; Month=11; // 12月 } else { Month--; } alert("戻ります"); mannen(); } function next() { if (Month==11){ // 12月 Year++; Month=0; // 1月 } else { Month++; } alert("進みます"); mannen(); } function mannen() { var mt=new Array(31,28,31,30,31,30,31,31,30,31,30,31); var i,x,y,tag=""; var day=new Date(Year,Month,1); // (1)ここの引数の意味がわかりません。 var week=day.getDay(); x=week*40+45;y=65; if ((Year % 4)==0 && (Year % 100)!=0 || (Year % 400)==0) mt[1]=29; // (2)mt[1]=29が何をしているのか意味がわかりません。 else mt[1]=28; tag+="<font size='3' style='position:absolute;left:60px;top:20px'>"+Year+"年"+(Month+1)+"月</font>"; for (i=1;i<=mt[Month];i++){ tag+="<font size='3' style='position:absolute;left:"+x+"px;top:"+y+"px'>"+i+"</font>"; x+=40; if ((week+i)%7==0){ x=45; y+=40; } } document.getElementById("canvas").innerHTML=tag; } </script> </head> <body onLoad="init()"> <img src="leftbtn.png" style="position:absolute;left:40px;top:18px" onClick="back()" /> <img src="rightbtn.png" style="position:absolute;left:160px;top:18px" onClick="next()" /> <img id="n1" src="calendar.png" style="position:absolute;left:40px;top:40px" /> <div id="canvas"> </div> </body> </html>

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

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

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

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

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

guest

回答3

0

逆にどこまでわかってるのか書いてないからどこまで説明すりゃいいのかわかんないけど

var day=new Date(Year,Month,1); // (1)ここの引数の意味がわかりません。

bodyのonLoadで呼ばれる関数で現在の年月で初期化されてる。
lftbtn.pngとrightbtn.pngの画像をクリックするたびに年月を進めたり戻したりしてる。

mt[1]=29; // (2)mt[1]=29が何をしているのか意味がわかりません。

うるう年の場合に2月の日数を29日にしてる。

投稿2019/10/31 17:14

gentaro

総合スコア8947

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

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

退会済みユーザー

退会済みユーザー

2019/10/31 17:17

ご回答ありがとうございますm(__)m
退会済みユーザー

退会済みユーザー

2019/10/31 17:37

回答を頂き、(2)について、うるう年であると理解できました。 (Year,Month,1);の箇所を、(Year,Month,2);にすると、カレンダーの日付の表示箇所が右に1つずれました。 また(Year,Month,0);にすると、カレンダーの日付のの表示箇所が左に1つずれました。 何故でしょうか?
guest

0

ベストアンサー

(1) var day=new Date(Year,Month,1); // (1)ここの引数の意味がわかりません。
こちらをごらんください。
そのうち、

new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);

の構文となります。[]は省略可能をあらわします。

year

年を表す整数値です。0 から 99 までの値は、1900 から 1999 の値にマッピングされます。互換性のために (2000 年問題を回避するために)、常に完全な年を指定するべきです。例えば 98 よりも 1998 を使いましょう。後述の例 を参照。
monthIndex
月を表す整数値です。0 (1月) から 11 (12月) までの値です。
day
任意。1 か月の日 (1-31) を表す整数値です。

(2) mt[1]=29; // (2)mt[1]=29が何をしているのか意味がわかりません。

javascript

1var mt=new Array(31,28,31,30,31,30,31,31,30,31,30,31);

によって、mtは[31,28,31,30,31,30,31,31,30,31,30,31]という、要素数12の配列になっています。
これは各月の日数でしょう。
配列の添字は0始まりですから、mt[1]で28を取得できます。
逆に、mt[1] = 29;とすると、二番目の要素が29で上書きされ、mtは[31,29,31,30,31,30,31,31,30,31,30,31]になります。

javascript

1if ((Year % 4)==0 && (Year % 100)!=0 || (Year % 400)==0)

でうるう年かどうかの判定をして、うるう年であるならばmt[1]=29;とすることで2月の日数を通常の28日から29日に書き換えているということです。

投稿2019/10/31 17:14

shinji709

総合スコア805

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

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

退会済みユーザー

退会済みユーザー

2019/10/31 17:15

ご回答ありがとうございますm(__)m
退会済みユーザー

退会済みユーザー

2019/10/31 17:37

回答を頂き、(2)について、うるう年であると理解できました。 (Year,Month,1);の箇所を、(Year,Month,2);にすると、カレンダーの日付の表示箇所が右に1つずれました。 また(Year,Month,0);にすると、カレンダーの日付のの表示箇所が左に1つずれました。 何故でしょうか?
shinji709

2019/11/01 00:58

setDateと同じ挙動ですね。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate > dayValue に 0 を与えた場合、日付は前月の最終日に設定されます。 なお蛇足ですが負の数を与えたときの挙動: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate > If a negative number is provided for dayValue, the date will be set counting backwards from the last day of the previous month. -1 would result in the date being set to 1 day before the last day of the previous month. 意訳:負の数を与えた場合、日付は前月の最終日から過去方向にカウントされた日に設定されます。(例えば)-1であれば前月の最終日の1日前の日になるでしょう。
退会済みユーザー

退会済みユーザー

2019/11/01 09:22

ご回答ありがとうございますm(__)m
guest

0

var day=new Date(Year,Month,1); // (1)ここの引数の意味がわかりません。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date

カレンダーの表示月の初日を指定している

mt[1]=29; // (2)mt[1]=29が何をしているのか意味がわかりません。

閏年っぽい2月末日の日にちを29日に変更

投稿2019/10/31 17:08

hentaiman

総合スコア6426

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

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

退会済みユーザー

退会済みユーザー

2019/10/31 17:11

早速のご回答ありがとうございますm(__)m
退会済みユーザー

退会済みユーザー

2019/10/31 17:37

回答を頂き、(2)について、うるう年であると理解できました。 (Year,Month,1);の箇所を、(Year,Month,2);にすると、カレンダーの日付の表示箇所が右に1つずれました。 また(Year,Month,0);にすると、カレンダーの日付のの表示箇所が左に1つずれました。 何故でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問