| Date Object | |
|
dateオブジェクトは時間(日時)と言う特殊な形のオブジェクトです。
時間と言うのは秒分で60で繰り上がりますし、時間は24時間で1日です。
また、月の日数や年の日数、曜日などがあり、普通の数値計算ではできません。
また、日付の書き方にも 年月日 や 月日年 などの色々な書き方があり
どこが日付なのかを文字列操作で特定して取出す事は、記述が決まっている場合しかできない事になります。
dateオブジェクトは 1970.1.1 00:00:00 を基本としてそこからのミリ秒で
日付、曜日などが決まってきます。
dateオブジェクトにするとそこから時間だけを取出したり、計算したりなどが
メソッドによって簡単にできる事になります。
特殊なオブジェクトで プロパティは 1つ2つありますが
ここでは説明を省きます。
オブジェクト生成 |
|
dateオブジェクトを生成するには、基本的に new 演算子を用いて
コンストラクタ(型・テンプレート)を呼び出し生成します。
■ 現在の時間(式が読み込まれた時間)を dateオブジェクトとして取出すには。
var Dt = new Date();
これで
Dt は 日付オブジェクトと言う特殊なオブジェクトになります。
後で説明するメソッドを使って 日付や時間などの情報を取出したり、
加えたり、引いたりする事ができます。
ちなみに document.write(Dt) や alert(Dt) で JavaScriptによる
一般的な 日時表示ができます。このページを開いた時間が次の通りです。
(実際に表示。あなたのPC上の日付)
さて、
new演算子を付けないとどうなるでしょう?
var Dt = Date();
これは間違いではないのですが、別の意味になりますので注意してください。
この場合
Dtには Dateオブジェクトを document.write()で表示したような
文字列が入ります。document.write()で表示すると オブジェクトの場合と
ほとんど同じような表示がされます。
表示される物は同じでも new が無い場合は
Dt は日付オブジェクトではなく
先ほどの様な日付をそのまま文字列にした物が格納されている文字列変数となります。
ですからメソッドを使う事はできません。ただの文字列です。
入室時間などを、JavaScript表記のまま表示するのであれば
document.write(Date()) で目的が果たせます。
例:
(実際に表示。あなたのPC上の日付 の 文字列)
■ 特定の時間を Dateオブジェクトとして生成するには
【 基本的なDateオブジェクト生成 (数値) 】
var Dt = new Date(年,月,日,時,分,秒,ミリ秒)
年月日以外は省略可能です。
年は 4桁の西暦を指定します。
月は 0 〜 11 を指定します。(0 が 1月です)
日は 1 〜 31 の有効な日付を数値で指定します。
時は 0 〜 23 の時間を指定します。(省略可能)
分は 0 〜 59 の分を指定します。(省略可能・指定する場合時間も指定)
秒は 0 〜 59 の秒を指定します。(省略可能・指定する場合分も指定)
ミリ秒 0〜999 のミリ秒を指定します。
ミリ秒はJavaScriptレベルによっては未対応だそうです。
【 日付として解釈可能な文字列から生成 (文字列)】
先ほどの基本的な日時指定による生成方法以外でも
日付として解釈可能(JavaScriptが)な文字列を入れて生成できます。
例えば document.lastModified と言う そのファイルの最終更新日を
文字列として取出す、documentオブジェクトのプロパティがあります。
内容は 次のような表示になります
この文字列は日付として当然解釈される物です。
これを文字列でなくDateオブジェクトにするには
Dt = new Date(document.lastModified)
これで最終更新日が文字列でなく、Dateオブジェクトになります。
さて、ここからわかるように最終更新日のフォーマット
月/日/年/ 時:分:秒と言う書き方で日付として解釈でき
Dateオブジェクトを生成できる事が理解できたでしょうか。
この他にも、日付として解釈可能な文字列があります。
数値方法ならそのまま、文字列を読み込ませる場合は文字列扱いで
ダブル、シングルクォーテーションを必要とします。
注:とほほさんの所のを引用します。
dd = new Date(1999, 11, 31)
dd = new Date(1999, 11, 31, 23, 59, 59)
dd = new Date("Dec 31, 1999 23:59:59")
dd = new Date("December 31, 1999 23:59:59")
この様な文字列が、日付オブジェクトを生成できる文字の並びです。
Date()オブジェクトになれば、日付規則の足算引算
時間部分のみの取りだしなどが可能になります。
【 ミリ秒で指定 】
Dateオブジェクトは 1970.1.1 00:00:00 を基点として全て計算します。
ある意味での絶対値として この基点からのミリ秒があります。
このミリ秒からも Date()オブジェクトを清々できます。
Dt = new Date(920127660000)
これは Sun Feb 28 00:01:00 UTC+0900 1999 となります。
計算上、この絶対値的扱いのミリ秒をよく使います。
ですから、このミリ秒からも Dateオブジェクトを作れるようになっています。
次の様な何日後の日付を取出し方もあります。(本来はSetメソッドを使う)
var now = new Date(); //現在の日付
var nowms = now.getTime(); //現在の日付をミリ秒単位に変換
var after = 180; //何日後かを入れる
after = after*24*60*60*1000; //ミリ秒に変換
ans = new Date(nowms+after); //現在+何日後 のミリ秒で日付オブジェクト生成
これで ans は 180日後の日付曜日などが格納されるDateオブジェクトになります。
さて、文字列や数値などからオブジェクトを生成する方法を書きましたが
出来上がったDate()オブジェクトは基本的にローカルタイムになります。
JavaScriptはローカルマシンで動くので、サーバーのローカルタイムではなく
そのスクリプトを表示した人のマシンのローカルタイムです。
ですからローカルタイムからGMT(UTC)への修正をする場合等も含め
標準時との時差はは動的な値になります。
サーバーの値を取るCGIなどではサーバーが日本時間なら9時間の修正固定でOKですが
JavaScriptは表示する人によって、その値が違ってきます。
ですから、その人のタイムゾーンのローカルタイムを取ってそれを利用するという
動的な物になります。方法はサンプル及びgetTimezoneOffset() で解説します。
メソッド |
|
■ Get系(取出し)メソッド
getFullYear() | 4桁の西暦を取出します [IE4,NN4.5 から] |
getYear() | 西暦 1900年からの差、2000年以降はそのまま4桁 |
getMonth() | 0〜11の月 ( 0 が1月です) |
getDate() | 日付 |
getDay() | 0〜6 曜日 ( 0 が日曜日) |
getHours() | 時 |
getMinutes() | 分 |
getSeconds() | 秒 |
getMilliseconds() | ミリ秒 |
getTime() | 1970.1.1 00:00:00基点から ミリ秒単位で |
getTimezoneOffset() | (世界標準時)−(ローカル時) を分で返します 日本:-540 |
【 基本的な使い方 】
var Dt = new Date()
var hour = Dt.getHours()
この様に、Dateオブジェクトにピリオドでメソッドを付けた物が
その取出した値となり、一般的には変数などに入れます。
これらのメソッドで取出された値は全て数値型です。
そのまま、四則計算などに使えます。
メソッドの取出せる値はスクリプト内ではそのまま使えますが、
一般表示には加工が必要な値を返すものがあります。
【 西暦 】
getFullYear()は対応しているのが IE4、NN4.5以上と言う事で
まだ、最新に近い事から専用ページなど以外では使いにくいです。
そこで従来からの getYear() を使うわけですが、これは 1900年からの差です。
とほほさんからの引用にもなりますが、Mozilla/3レベル以上のJavaScriptでは
2000年以降は そのまま4桁の数字を返すそうです。
従来であれば 1900を足すと言う加工をする事で西暦になったのですが、
これから2000年以降を考えると1900を足すと2000年は 3900年となってしまいますね。
ですから取出した値によって加工を変える必要があります。
そのまま引用(とほほのWWW入門から)
dd = new Date();
yy = dd.getYear();
if (yy < 1900){ yy += 1900;}
或いは yyの文字の長さが 2 なら 4なら などでもいいです。
2桁で返してくる場合は 1900年代なので1900を足す事で
4桁の西暦になります。
2000年を過ぎて、古い時間データを取り扱わない時期になれば
余計な処理はなくても大丈夫なようになるでしょう。
これが所謂2000年問題として大騒ぎになった、コンピューターが当初から西暦を2桁表示として扱った為のツケです。
【 月 getMonth() 】
月は 0〜11 の値が取出されます。
データとして使用する場合は、理解していればいい事ですが
そのまま表示すると 1ヶ月ずれている事になってしまいます。
数字にする場合は数値型なのでそのまま 1 を足します。
var Dt = new Date()
var month = Dt.getMonth()+1
月を 文字列(英語・日本語)で表す場合は配列を使い
取出した値をそのまま配列のインデックスとして使います。
var Mname = new Array(12)
Mname[0] = "Jan";
・
・
・
Mname[11] = "Dec";
var Dt = new Date();
var month = Mname[Dt.getMonth()];
【 曜日 getDay() 】
曜日は 0 〜 6 の値なのでそのまま表示しても意味が通りません。
月の値を文字列にする場合と同じように、配列で文字にします。
var Dname = new Array(7)
Dname[0] = "Sun";
・
・
・
Dname[6] = "Sat";
var Dt = new Date();
var days = Dname[Dt.getDay()];
日、時、分、秒、ミリ秒に関してはそのままの数字で使えます。
【 getTime() 】
getTime()で取出される値は 1970.1.1 00:00:00 からの ミリ秒です。
ミリ秒をそのまま表示などで使う事はありませんが、ある意味での絶対値ですので
ある日時とある日時との差を求めたりする場合等は、ミリ秒単位にして
計算すればすぐにミリ秒単位の差が求められれます。
この様にDateオブジェクト全体を数値化する為の物だと思ってください。
【 getTimezoneOffset() 】
通常、日本時間で動くあなたのサーバーで 時間を取り表示すると
Sun Jun 6 17:40:28 UTC+0900 1999
の様に、GMTかUTCで 標準時との時差が出ると思います。
この場合の +0900 は 9時間進んでると言う事ですね。
getTimezoneOffset()で取出す値は、-540のようになります。
世界標準時 −(引く) ローカルタイム と言う式になり、分で表すからです。
つまり、ローカルタイムにこの オフセット分を足せば世界標準時になると言う事です。
完全に日本人しか相手にしない方は、余り気にする物でもないようですが
クッキー発行の場合等は、GMTに直す必要があります。
|
■ Set系(設定)メソッド
setFullYear() | 4桁の西暦で設定す [IE4,NN4.5 から] |
setYear() | 1900からの差、2000年後は4桁 |
setMonth() | 0〜11の月 ( 0 が1月です) |
setDate() | 日付 |
setHours() | 時 |
setMinutes() | 分 |
setSeconds() | 秒 |
setMilliseconds() | ミリ秒 |
setTime() | 1970.1.1 00:00:00基点からのミリ秒 |
【 基本的な使い方 】
基本的な使い方としては Dateオブジェクトにピリオドで付け
( )内に設定すべき値を入れます。
var Dt = new Date();
Dt.setDate(1);
最初にできた Dateオブジェクトは今の日時の値を持ちます。
setDate() で 1 を セットしています。これは 日付を 1日 にすると言う事です
ですから、セット後のDtの値は 今月の1日の日付になります。
曜日も今月の1日の曜日になっています。
setメソッドはそれをピリオドで付けたオブジェクトを設定してしまいます。
一時的な物ではなく、その場で元のオブジェクトが変更されます。
set系で基本的に セットした物を変数に代入すると言う方法では使いません。
例えば n = Dt.setDate(1) とした場合、nには 新たにセットされたDtという
Dateオブジェクトをミリ秒で表した物が入ります。
nは Dateオブジェクトではなく、ミリ秒の数値型になります。
つまり、Dateオブジェクトの値を修正する場合に使うわけです。
わざわざ、一度Dateオブジェクトを作ってからなぜ直すのか?
最初から、今月の1日の日付を使って Dateオブジェクトを生成すればいいと
思われる場合もあると思いますが、ここの説明でも使っている『今月の』と言う
言い回しに気づかれていると思います。
この場合は 固定値で作るのではなく常に『今月の・・・』を指す事ができるわけです。
例として
次回の会合は
です。
これは加工を最小限にしています。
<SCRIPT LANGUAGE="JavaScript">
var Dt2 = new Date()
if(Dt2.getDate() != 1){
Dt2.setMonth(Dt2.getMonth()+1)
Dt2.setDate(1)
}
Dt2.setHours(21,0,0)
document.write(Dt2)
</SCRIPT> |
これは 毎月1日に 会合を開く場合のインフォです。
わざわざ書く事でもありませんが、例えば・・です。
このスクリプトを書いておけば、その日が1日でなければ
常に来月の1日の日付と曜日、時間を 表示します。
この例では実際付きの値を取出して1足した物をスクリプトで表示し
あとは、HTML文で表示すればいいことなのですが(曜日は出ない)
set系メソッドでは、基本は修正する部分の有効な範囲の数値を指定します。
有効ではない範囲の数値を指定すると、時間計算としての繰り上がりを
自動的にしてくれます。
例えば、時間は60分ですが 100 という数値を指定すると
分に40 の数値をセットし、時に1を足したのと同じ事になります。
ここで間違わないで欲しいのは、セット後の 分の値は 40になりますが
時間はすでにDateオブジェクトにある時間に1足された物になると言う事です。
var Dt = new Date();
Dt.setMinutes(100);
Dtの時間が 19:23:24 だとすると、セット後の時間は
20:40:24 になると言う事です。
分はセット、時は繰り上がりによる、追加加算となります。
では、次の例として 何日後、何時間後、何分後などの場合の方法を。
次の時間は、このページを表示してから(Dateオブジェクトが生成されてから)
100分後の日時です。
です。
<SCRIPT LANGUAGE="JavaScript">
var Dt3 = new Date();
Dt3.setMinutes(Dt3.getMinutes()+100);
document.write(Dt3)
</SCRIPT> |
何分後、何時間後などの様に使う場合には、今の必要な値を getで取り
それに 何分後などの数値を足してから、setします。
さて、『 後 』ではなく、『 前 』の場合は?と思う方もいると思いますので。
前にする場合には、マイナスの値をセットします。
-100をセットする場合は 分は20になります。
時間は今の時間から40分引いて、まず1つ減算され、 60分引いて1つ減算されます。
従って、2時間下がる事になります。
現在が 18:43:30 だとすると 16:20:30 になります。
setのみの場合は、常にその単位の部分はsetになり、加算減算ではないので
注意してください。繰り上がり単位部分は 加算減産になります。
例えば、setDate(-10) は 今からマイナス10日ではなく先月が 31日の日付なら
先月の21日になります。setは現在からの相対では無い事に注意してください。
setDate(-40)は先先月の 20日頃になります。
先ほどの例のように、今の時間から・・・ 何分前のようにするには
-100をセットするのではなく今の時間を取ってその単位に −してやります。
<SCRIPT LANGUAGE="JavaScript">
var Dt3 = new Date();
Dt3.setMinutes(Dt3.getMinutes()-100);
document.write(Dt3)
</SCRIPT> |
これで、今(Dateオブジェクトの時間)から、100分前と言う事になります。
基本的な使い方が長くなりましたが、この様にsetはその特定の部分の値を
設定し直す時に使います。
ただし、setTime()については、1970.1.1 00:00:00 からのミリ秒を設定しますので
DateObject.setTime(ミリ秒) は new Date(ミリ秒) と同じ事になります。
新たにオブジェクトを作るか、既存のオブジェクトを再生成するかの違いみたいな物です。
setTime()の場合はタイムゾーンに依存しないとの解説があったのですが
タイムゾーンも表示されてしまいますし。。。。。
では 個々のset メソッドの特徴を含めて少し。
【 数値に注意する Month 】
Monthに関しては 0〜11の様に月名ではなく数字でセットします。
この時に月の値は 1ずれるので注意してください。
0が1月と言う意味になります。
【 2000年対策の必要な setYear() 】
setYear()は 1900年代までは 1900を引いた2桁の数値をセットします。
2000年以降は 西暦そのままの 4桁の数値をセットします。
が IE4、NN3.03、NN4.5でテストした所では
1900年代であっても そのまま4桁の数値で大丈夫なようです。
それ以下のブラウザはテストできないので、わかりませんが。
安全策としてはやはり、きちんと分けて考えるべきでしょうか。
【 setFullYear() 】
これは IE4、NN4.5から使えるそうですが
常に4桁の西暦のままの指定でOKです。
get系では、その必要な項目の値だけを取出しますが
設定用のset系では、日付系と時間系に分けて考え、
それぞれの 以下の値も同時設定できます。
setFullYearの場合は、Month、Date をカンマで付け足して同時設定できます。
setYear()はできません。いずれ無くなるでしょうから。
<SCRIPT LANGUAGE="JavaScript">
var Dt4 = new Date();
Dt4.setFullYear(2010,2,4);
document.write(Dt4)
</SCRIPT> |
これは、Dt4 と言うDateオブジェクトの日付を 2010年3月4日 にセットする場合です。
同様に setMonth()は 月と、日を同時に設定できます。
Dt4.setMonth(2,4)
setDate()はそれより下が無いので、日付だけになります。
FullYearやMonthでは付きの値を間違えない様に気を付けてください。
時間系では setHours() は 時間、分、秒、ミリ秒を同時設定できます。
setMinutes()はそれ以下の 分、秒、ミリ秒 を同時設定できます。
例:Dt4.setHours(2,10,50)
2時10分50秒を設定しています。
この様にset系は オブジェクトを日付と時間の2つのグループにわけ
同時設定ができるので、利用してください。
ちなみに、上位のsetで下位までの複数設定した場合
時、分、秒、の用に前から順にセットされて行きますので、
これらの値が、有効値を越えている場合は、普通にセットするのと同じように
繰り上がりが行われます。
例:Dt4.setHours(2,100,50)
この場合、3,40,50 をセットしたのと同じ事になります。
さて、マイナスの場合ですが、マイナスをセットする人が居るでしょうか?
スクリプトの流れ上マイナスになる場合もあるかもしれません。
自分で、マイナスをセットして試行錯誤してみてください。
手抜きではありませんので・・・・m(__)m
|
■ その他のメソッド
getUTC / setUTC | UTCの日時を 取る又は設定します |
getUTCFullYear() 〜 getUTCMilliseconds()等
setUTCFullYear() 〜 setUTCMilliseconds()等
IE4、NN4.5から使える、Dateオブジェクトから世界標準時を取出せる
または設定できるメソッド群です。
今まで標準時は GMT(グリニッジ標準時)と呼んでいましたが、
今後はUTC(世界協定時刻)として統一されて行くようです。
さて、get系でローカルタイムで取出してからわざわざ時差修正しなくても
直接、標準時として取出せるので、必要に応じて使えます。
set系では標準時でセットしますのでローカルタイムはその時差分ずれた物になります。
これらは、これらを使った方が便利な時にのみ使います。
まだ、旧ブラウザの事を考えねばならない時期ですので
未対応ブラウザの事を考慮して使ってください。
|
toString() | 文字列型変換 |
Dateオブジェクトをその値を文字列にします。
文字列になった物はDateオブジェクトではありません。
var Dt = new Date();
temp = Dt.toString()
tempは Dtをそのまま表示させたのと同じ文字列が格納された文字列型変数です。
toStringは Dateオブジェクト専用のメソッドではなく、オブジェクトを
文字列型にするメソッドです。
|
toLocaleString() | 文字列型変換 |
Dateオブジェクトをその値をその環境に応じた文字列にします。
文字列になった物はDateオブジェクトではありません。
また、Dateオブジェクトをそのまま表示させた場合とは文字列はちょっと異なります。
つまり、toString()とは少し異なる文字列になります。
toLocaleString()で文字列化した場合は、その人の環境に応じた文字列なので
ブラウザ、マシン言語環境によっても変わります。
var Dt = new Date();
temp = Dt.toLocaleString()
1999年6月1日 12:30:40秒を Dateオブジェクトとにして
私のIE4、NN4.5、NN3.03でやった結果は
【 IE4 】 06/01/1999 12:30:40
【 NN4.5 】 Monday, June 01, 1999 12:30:40
【 NN3.03 】 06/01/99 12:30:40
となります。GMT(UTC)等の余計な部分は文字列にされません。
また、テストはできないのですが、例えばアメリカ書式の場合
月/日/年 なのに対して、ヨーロッパ書式では 日/月/年のようになると
IEのJScript解説にはありました。
この様にその環境で一般にわかりやすい日時表示になると言う事です。
|
toGMTString() toUTCString() | GMT/UTCの日時で文字列にします |
両方とも GMT時間に修正した物を、GMT表示の規則で表示します。
現在UTCに変わってきているので GMTは過去との互換だと思います。
toUTCString()は IE4、NN4.5からとの事です。
GMT表記では
曜日、日 月名 西暦 時:分:秒 GMT となります。
これはブラウザ出違わない、決まった表記規則だと思います。が・・・
NN4.5では toUTCString() でも 最後の文字がGMTと表示されます。
IE4では toGMTString()でも UTCとでます。
クッキーの際に まだGMTとすべきだと思うので、IEでは文字列交換してください。
確実な事がわからないので、クッキー発行の場合私はこれを使っていません。
多分これをそのまま使っていいはずです。
var Dt = new Date();
temp = Dt.toUTCString()
|
Date.parse() | 文字列をミリ秒単位に変換 |
これは、様々なDateオブジェクトに対して使う物ではありません。
Date.parse(文字列)でセットだと思ってください。
文字列を解釈してそれを 1970.1.1 00:00:00からのミリ秒として
数値型の値に変換します。
var Dt = Date.parse("06/07/1999 22:21:20")
document.write(Dt)
日時として解釈される文字列は規則があります。
Dateオブジェクトを生成する場合の 文字列から生成する場合に準じます。
|
Date.UTC() | ミリ秒単位を取得 |
これは、様々なDateオブジェクトに対して使う物ではありません。
Date.UTC(年,月,日,時,分,秒)でセットだと思ってください。
数値を 1970.1.1 00:00:00からのミリ秒として数値型の値に変換します。
var Dt = Date.UTC(2050,10,3)
document.write(Dt)
UTC時間として扱われるような事が、解説にはあるのですがどうも使い方が今一つ。
とりあえず、Dateオブジェクトを生成する場合の 年、月、日の様な並びの
数値から、生成する場合と同じになるようです。
|
Tips & Samples |
|
説明の部分でも使い方を書いてきたので必要ないかもしれませんが
一般的な使い方と注意なども書いておきます。
◆ サンプル1 一般的な日時取得
<SCRIPT LANGUAGE="JavaScript">
var Marray = new Array(12); //月の名前の配列
Marray[0] = "Jan";
Marray[1] = "Feb";
Marray[2] = "Mar";
Marray[3] = "Apr";
Marray[4] = "May";
Marray[5] = "Jun";
Marray[6] = "Jul";
Marray[7] = "Aug";
Marray[8] = "Sep";
Marray[9] = "Oct";
Marray[10] = "Nov";
Marray[11] = "Dec";
var Warray = new Array(7); //曜日の名前の配列
Warray[0] = "Sun";
Warray[1] = "Mon";
Warray[2] = "Tue";
Warray[3] = "Wed";
Warray[4] = "Thu";
Warray[5] = "Fri";
Warray[6] = "Sat";
var now = new Date();
with(now){
yy = getYear(); //年
if(yy < 1900){ yy += 1900}
mm = getMonth(); //月
dd = getDate(); //日
wd = getDay(); //曜日
h = getHours(); //時
m = getMinutes(); //分
s = getSeconds(); //秒
ms = getMilliseconds(); //ミリ秒
}
//これで 上で取った各変数 yyやmm等に取出した値が数値で入ってます。
//月と曜日は 配列のインデックスとして使います。 例:Marray[mm]
</SCRIPT> |
◆ 注意事項1 オブジェクトは コピーが危険
<SCRIPT LANGUAGE="JavaScript">
//Dateオブジェクト
var Dts = new Date();
Dts2 = Dts;
</SCRIPT> |
これで Dts と Dts2 は別の物として扱われるでしょうか?
Dts2 は 先ほどJavaScript上で作られたDts を指すショートカットに過ぎません。
Dtsはオブジェクト、Dts2はその代名詞で同じオブジェクトを指します。
ですから、この状態で Dts2 に setHours(10) を行うと、Dts に行っているのと同じで
Dtsを参照するとちゃんとセット後の値になってしまっています。
元を残してコピーを作ろうとしてもこの方法では
コピーではなく、オブジェクトの代名詞を作るだけです。
確実に、全く同じ日付を作りたいなら
<SCRIPT LANGUAGE="JavaScript">
//Dateオブジェクト
var Dts = new Date();
Dts2 = new Date(Dts);
</SCRIPT> |
これで、Dts と Dts2 は同じ時間データをもつ別々のオブジェクトになります。
Dateオブジェクトは簡単に自分でテストできます。
var Dt = new Date() で Dateオブジェクトが作れますから
このオブジェクトに対して色々操作をするだけです。
疑問に思う事はどんどん自分でテストを重ねてください。