# JavaScript 基礎編12(学習日:9/25)(Date、Math)
## 1. Date
### Dateの定義と基本操作
Dateオブジェクトは、JavaScript上で日付や時刻を扱うためのビルドインオブジェクトの一つである。
UTC(協定世界時)=1970年1月1日0時0分0秒を基準とした相対的なミリ秒として保持されている。
Dateオブジェクトのインスタンスは、それぞれがひとつの時刻値を持つ。
<基本操作>
* Dateインスタンスの作成(現在時刻) const time = new Date();
* 現在の時刻値のみ取得(インスタンス生成なし) Date.now();
* Dateインスタンスの作成(任意時刻) const time = new Date(時刻値)
* Dateインスタンスから時刻値を取得 time.getTime();
* ISO8601形式(分かりやすい形式)に変更 time.toISOString();
※下二つは()内に任意の時刻値を入力可能である。
### 任意時刻の表し方
1. 時刻値をそのまま入力する。
UTCで時刻を直接指定する。もっとも単純な方法だが、10桁以上に渡る数値のため、読み取りにくいデメリットがある。
2. ISO8601等、指定された形式の文字列を入力する。
各規格に基づき、文字列で入力する。UTC時刻値に比べてわかりやすい。
一方で、末尾にZ(UTCを表す)を付けない場合は、ローカル環境で設定されているタイムゾーンに自動的に変換されるため注意が必要である。
3. 項目ごとに分けて入力する。
年、月、日、時間、分、秒、ミリ秒の順番で引数に入力する。
年、月は必須である。以降は任意(省略可)。
直感的に非常にわかりやすいが、月のみはインデックス値と同様に0~11で表す必要がある。
原則としてローカル環境のタイムゾーンに依存する。
UTC時刻で表したいときはDate.UTC(引数)を用いる。
```javascript=
// 1. 時刻のミリ秒値を直接指定する形式
// 1136214245999はUTCにおける"2006年1月2日15時04分05秒999"を表す
const date = new Date(1136214245999);
// 末尾の'Z'はUTCであることを表す
console.log(date.toISOString()); // => "2006-01-02T15:04:05.999Z"
// 2. UTCにおける"2006年1月2日15時04分05秒999"を表すISO 8601形式の文字列
const inUTC = new Date("2006-01-02T15:04:05.999Z");
console.log(inUTC.toISOString()); // => "2006-01-02T15:04:05.999Z"
// 上記の例とは異なり、UTCであることを表す'Z'がついていないことに注意
// Asia/Tokyo(+09:00)で実行すると、UTCにおける表記は9時間前の06時04分05秒になる
const inLocal = new Date("2006-01-02T15:04:05.999");
console.log(inLocal.toISOString()); // "2006-01-02T06:04:05.999Z" (Asia/Tokyoの場合)
// 3. 実行環境における"2006年1月2日15時04分05秒999"を表す
// タイムゾーンを指定することはできない
const date1 = new Date(2006, 0, 2, 15, 4, 5, 999);
console.log(date1.toISOString()); // "2006-01-02T06:04:05.999Z" (Asia/Tokyoの場合)
// Date.UTCメソッドを使うとUTCに固定できる
const ms = Date.UTC(2006, 0, 2, 15, 4, 5, 999);
// 時刻値を渡すコンストラクタと併用する
const date2 = new Date(ms);
console.log(date2.toISOString()); // => "2006-01-02T15:04:05.999Z"
```
### Dateのインスタンスメソッド
多くの場合、getter,setterのメソッドである。
getMonth, SetMonthは前述の通り0~11で表現される。通常表示したい場合は+1する必要がある。
getTimezoneOffsetメソッドは、ローカルタイムゾーンから見たUTCの差を分単位の数値で返す。(例:日本はUTC+9時間→ローカルタイムゾーンから見たUTCは9時間=540分遅い→-540が返る。)
### Dateとライブラリ
Dateでは直感的な記述が難しい面が多く、実際のコードではライブラリに頼ることが多い。
## 2. Math
### Mathオブジェクトの定義と具体例
Mathオブジェクトは、数学的な関数や定数が納められたビルドインオブジェクトの一つである。
コンストラクタがなく、引数が存在しない静的なメソッド・プロパティとして提供されている。
<具体例>
* 円周率 Math.PI;
* 三角関数(sin,cos,tan) Math.sin, Math.cos, Math.tan
* 乱数生成 Math.random; ランダムな0以上1未満の浮動小数点数を返す。
* 最大値 Math.Max(); 複数の引数のうち、最大のものを返す。
* 最小値 Math.Min(); 複数の引数のうち、最小のものを返す。
* 床関数 Math.floor(); 小数点をより小さい整数に切り捨てる。(1.3 → 1, -1.3 → -2)
* 天井関数 Math.ceil(); 小数点をより大きい整数に切り上げる。(1.3 → 2, -1.3 → -1)
* 四捨五入 Math.round(); .5以上は切り上げ、未満なら切り捨て。
* 切り落とし Math.trunc(); 正負によらず小数点を切り捨てる。(1.3 → 1, -1.3 → -1)
###### tags: `JavaScript`