日付オブジェクト

Date オブジェクトは JavaScript のネイティブ時間ライブラリです。国際標準時(UTC)の1970年1月1日0時0分0秒をゼロ点とし、表現できる時間範囲は前後1億日(単位はミリ秒)です。

通常の関数の使い方

Date オブジェクトは通常の関数として直接呼び出すことができ、現在の時刻を表す文字列を返します。

日付()
// "2015 年 12 月 1 日火曜日 09:34:43 GMT+0800 (CST)"

パラメータを指定しても、Date を通常の関数として使用すると、現在の時刻が返されることに注意してください。

日付(200011日)
// "2015 年 12 月 1 日火曜日 09:34:43 GMT+0800 (CST)"

上記のコードは、「Date」を直接呼び出すと、パラメーターの有無に関係なく、常に現在時刻が返されることを示しています。

コンストラクターの使用法

Date もコンストラクターとして使用できます。これに対して new コマンドを使用すると、Date オブジェクトのインスタンスが返されます。パラメーターが追加されない場合、インスタンスは現在の時間を表します。

var today = new Date();

「Date」インスタンスにはユニークな点が 1 つあります。他のオブジェクトが評価されるときは、デフォルトで .valueOf() メソッドが呼び出されますが、Date インスタンスが評価されるときは、デフォルトで toString() メソッドが呼び出されます。これにより、Date インスタンスが評価され、そのインスタンスに対応する時刻を表す文字列が返されます。

var today = new Date();

今日
// "2015 年 12 月 1 日火曜日 09:34:43 GMT+0800 (CST)"

// と同等
today.toString()
// "2015 年 12 月 1 日火曜日 09:34:43 GMT+0800 (CST)"

上記のコードでは、todayDate のインスタンスであり、直接評価することは toString メソッドを呼び出すことと同等です。

コンストラクターとして使用される場合、Date オブジェクトは複数の形式のパラメーターを受け入れ、パラメーターに対応する時間インスタンスを返すことができます。

//パラメータは時間ゼロから計算されたミリ秒数です
新しい日付(1378218728000)
// 2013 年 9 月 3 日火曜日 22:32:08 GMT+0800 (CST)

//パラメータは日付文字列です
new Date('2013 年 1 月 6 日');
// 2013 年 1 月 6 日日曜日 00:00:00 GMT+0800 (CST)

//パラメータは複数の整数です。
//年、月、日、時、分、秒、ミリ秒を表します
新しい日付(2013, 0, 1, 0, 0, 0, 0)
// 2013 年 1 月 1 日火曜日 00:00:00 GMT+0800 (CST)

Date コンストラクターのパラメーターについては、いくつかの注意事項があります。

最初のポイントは、パラメーターが 1970 年の元旦より前の時間を表す負の整数である可能性があることです。

新しい日付(-1378218728000)
// 1926 年 4 月 30 日金曜日 17:27:52 GMT+0800 (CST)

2 番目の点は、Date.parse() メソッドで解析できる任意の文字列をパラメータとして使用できることです。

新しい日付('2013-2-15')
新しい日付('2013/2/15')
新しい日付('2013/02/15')
新しい日付('2013-FEB-15')
新しい日付('2013 年 2 月 15 日')
新しい日付('2013年2月15日')
新しい日付('2013 年 2 月 15 日')
新しい日付('2013 年 2 月 15 日')
新しい日付('2013 年 2 月 15 日')
新しい日付('2013年2月15日')
// 2013 年 2 月 15 日金曜日 00:00:00 GMT+0800 (CST)

日付文字列を記述する上記の複数の方法はすべて同じ時刻を返します。

第三に、パラメータが年、月、日などの複数の整数の場合、年と月は省略できず、他のパラメータは省略できます。言い換えれば、「年」パラメータのみを使用すると、「Date」はそれをミリ秒数として解釈するため、この時点では少なくとも 2 つのパラメータが必要です。

新しい日付(2013)
// 1970 年 1 月 1 日木曜日 08:00:02 GMT+0800 (CST)

上記のコードでは、2013 は年ではなくミリ秒数として解釈されます。

newDate(2013, 0)
// 2013 年 1 月 1 日火曜日 00:00:00 GMT+0800 (CST)
新しい日付(2013, 0, 1)
// 2013 年 1 月 1 日火曜日 00:00:00 GMT+0800 (CST)
新しい日付(2013, 0, 1, 0)
// 2013 年 1 月 1 日火曜日 00:00:00 GMT+0800 (CST)
新しい日付(2013, 0, 1, 0, 0, 0, 0)
// 2013 年 1 月 1 日火曜日 00:00:00 GMT+0800 (CST)

上記のコードでは、パラメータがいくつあっても、返されるのは 2013 年 1 月 1 日の 0 時です。

最後に、各パラメータの値の範囲は以下のとおりです。

  • 年: 「2000」などの 4 桁の年を使用します。 2 桁または 1 桁で記述する場合は、「1900」を追加します。つまり、「10」は 1910 を表します。負の数の場合はBCを意味します。
  • 月: 「0」は 1 月を意味し、「11」は 12 月を意味します。
  • 曜日:「1」から「31」まで。
  • 営業時間: 0 時から 23 時まで。
  • 分:「0」から「59」まで。
  • 秒: 059
  • ミリ秒: 0999

月は「0」から始まりますが、日は「1」から始まることに注意してください。また、日付のデフォルト値「1」に加え、時、分、秒、ミリ秒のデフォルト値はすべて「0」です。

これらのパラメータが通常の範囲を超える場合は、自動的に変換されます。たとえば、月が「15」に設定されている場合、翌年の 4 月に変換されます。

新しい日付(2013,15)
// 2014 年 4 月 1 日火曜日 00:00:00 GMT+0800 (CST)
新しい日付(2013, 0, 0)
//2012 年 12 月 31 日月曜日 00:00:00 GMT+0800 (CST)

上記コードの 2 番目の例では、日付は前月の最終日を表す「0」に設定されています。

パラメーターでは、差し引かれる時間を示すために負の数値を使用することもできます。

新しい日付(2013, -1)
// 2012 年 12 月 1 日土曜日 00:00:00 GMT+0800 (CST)
新しい日付(2013, 0, -1)
// 2012 年 12 月 30 日日曜日 00:00:00 GMT+0800 (CST)

上記のコードでは、月と日のそれぞれに負の数値が使用されており、対応する時間が基準日から差し引かれることを示しています。

日付操作

自動型変換中に、「Date」インスタンスが数値に変換される場合、それは対応するミリ秒数と等しくなります。文字列に変換される場合、それは対応する日付文字列と等しくなります。したがって、2 つの日付インスタンス オブジェクトが減算されると、それらの間のミリ秒数が返され、加算されると、2 つの文字列を連結して形成された新しい文字列が返されます。

var d1 = 新しい日付(2000, 2, 1);
var d2 = 新しい日付(2000, 3, 1);

d2-d1
// 2678400000
d2 + d1
// "2000 年 4 月 1 日土曜日 00:00:00 GMT+0800 (CST)2000 年 3 月 1 日水曜日 00:00:00 GMT+0800 (CST)"

静的メソッド

Date.now()

「Date.now」メソッドは、現在時刻からゼロ (1970 年 1 月 1 日の 00:00:00 UTC) までのミリ秒数を返します。これは、Unix タイムスタンプの 1000 倍に相当します。

Date.now() // 1364026285194

Date.parse()

Date.parse メソッドは、日付文字列を解析し、その時刻からゼロ (1970 年 1 月 1 日 00:00:00) までのミリ秒数を返すために使用されます。

日付文字列は、RFC 2822 と ISO 8061 の 2 つの標準、つまり「YYYY-MM-DDTHH:mm:ss.sssZ」形式に準拠する必要があります。最後の「Z」はタイムゾーンを表します。ただし、他の形式も解析できます。以下の例を参照してください。

Date.parse('1995 年 8 月 9 日')
Date.parse('2011年1月26日 13:51:50')
Date.parse('1995 年 12 月 25 日月曜日 13:30:00 GMT')
Date.parse('月曜日、1995 年 12 月 25 日 13:30:00 +0430')
Date.parse('2011-10-10')
Date.parse('2011-10-10T14:48:00')

上記の日付文字列はすべて解析できます。

解析が失敗した場合は、「NaN」が返されます。

Date.parse('xxx') // NaN

日付.UTC()

「Date.UTC」メソッドは、年、月、日、その他の変数をパラメータとして受け取り、時刻からゼロ (1970 年 1 月 1 日 00:00:00 UTC) までのミリ秒数を返します。

// フォーマット
Date.UTC(年、月[、日付[、時[、分[、秒[、ミリ秒]]]]])

// 使用法
日付.UTC(2011, 0, 1, 2, 3, 4, 567)
// 1293847384567

このメソッドのパラメーターの使用法は、Date コンストラクターの使用法とまったく同じです。たとえば、月は 0 から始まり、日付は 1 から始まります。違いは、「Date.UTC」メソッドのパラメータは UTC 時間 (協定世界時) として解釈され、「Date」コンストラクタのパラメータは現在のタイムゾーンの時間として解釈されることです。

##インスタンスメソッド

Date のインスタンス オブジェクトには、valueOf と toString 以外にも数十の独自メソッドがあり、次の 3 つのカテゴリに分類できます。

  • to クラス: Date オブジェクトから指定された時刻を表す文字列を返します。
  • get クラス: Date オブジェクトの日付と時刻を取得します。
  • set クラス: Date オブジェクトの日付と時刻を設定します。

Date.prototype.valueOf()

valueOf メソッドは、インスタンス オブジェクトから時刻 0 (1970 年 1 月 1 日 00:00:00 UTC) までのミリ秒数を返します。このメソッドは getTime メソッドと同等です。

var d = 新しい日付();

d.valueOf() // 1362790014817
d.getTime() // 1362790014817

数値が期待される場合、Date インスタンスは自動的にこのメソッドを呼び出すため、次のメソッドを使用して時間間隔を計算できます。

var start = 新しい日付();
// ...
var end = 新しい日付();
var 経過 = 終了 - 開始;

クラスメソッドへ

(1)Date.prototype.toString()

toString メソッドは完全な日付文字列を返します。

var d = 新しい日付(2013, 0, 1);

d.toString()
// "2013 年 1 月 1 日火曜日 00:00:00 GMT+0800 (CST)"
d
// "2013 年 1 月 1 日火曜日 00:00:00 GMT+0800 (CST)"

toString がデフォルトの呼び出しメソッドであるため、Date インスタンスを直接読み取る場合、このメソッドを呼び出すことと同じになります。

(2)Date.prototype.toUTCString()

toUTCString メソッドは、北京時間より 8 時間遅い、対応する UTC 時間を返します。

var d = 新しい日付(2013, 0, 1);

d.toUTCString()
// "2012 年 12 月 31 日月曜日 16:00:00 GMT"

(3)Date.prototype.toISOString()

toISOString メソッドは、対応する時刻の ISO8601 書き込みメソッドを返します。

var d = 新しい日付(2013, 0, 1);

d.toISOString()
// "2012-12-31T16:00:00.000Z"

toISOString メソッドは常に UTC タイムゾーンの時刻を返すことに注意してください。

(4)Date.prototype.toJSON()

toJSON メソッドは、ISO 日付文字列を JSON 形式で返します。これは、toISOString メソッドによって返される結果とまったく同じです。

var d = 新しい日付(2013, 0, 1);

d.toJSON()
// "2012-12-31T16:00:00.000Z"

(5)Date.prototype.toDateString()

toDateString メソッドは、日付文字列 (時、分、秒を含まない) を返します。

var d = 新しい日付(2013, 0, 1);
d.toDateString() // "2013 年 1 月 1 日火曜日"

(6)Date.prototype.toTimeString()

toTimeString メソッドは、時刻文字列 (年、月、日を除く) を返します。

var d = 新しい日付(2013, 0, 1);
d.toTimeString() // "00:00:00 GMT+0800 (CST)"

(7)現地時間

次の 3 つのメソッドは、Date インスタンスを現地時間を表す文字列に変換できます。

  • Date.prototype.toLocaleString(): 完全な現地時間。
  • Date.prototype.toLocaleDateString(): ローカル日付 (時、分、秒は含まれません)。
  • Date.prototype.toLocaleTimeString(): 現地時間 (年、月、日を除く)。

以下に使用例を示します。

var d = 新しい日付(2013, 0, 1);

d.toLocaleString()
// 中国語版ブラウザは「2013/1/1 00:00:00」
// 英語版ブラウザは「1/1/2013 12:00:00 AM」です

d.toLocaleDateString()
// 中国語版ブラウザは「2013/1/1」です
// 英語版ブラウザは「1/1/2013」です

d.toLocaleTimeString()
// 中国語版ブラウザは「00:00:00」
//英語版ブラウザは「12:00:00 AM」

3 つのメソッドにはすべて 2 つのオプションのパラメータがあります。

dateObj.toLocaleString([ロケール[, オプション]])
dateObj.toLocaleDateString([ロケール[, オプション]])
dateObj.toLocaleTimeString([ロケール[, オプション]])

これら 2 つのパラメータのうち、「locales」は使用する言語を指定する文字列で、「options」は設定オブジェクトです。以下は、それぞれ「en-US」および「zh-CN」言語設定を使用した「ロケール」の例です。

var d = 新しい日付(2013, 0, 1);

d.toLocaleString('en-US') // "2013/1/1、午前 12:00:00"
d.toLocaleString('zh-CN') // "2013/1/1 00:00:00"

d.toLocaleDateString('en-US') // "2013/1/1"
d.toLocaleDateString('zh-CN') // "2013/1/1"

d.toLocaleTimeString('en-US') // "午前 12:00:00"
d.toLocaleTimeString('zh-CN') // "00:00:00"

「options」設定オブジェクトには次のプロパティがあります。

  • dateStyle: 可能な値は fulllongmediumshort です。
  • timeStyle: 可能な値は fulllongmediumshort です。
  • : 可能な値は、数値2 桁長い短い狭いです。
  • : 可能な値は、数値2 桁 です。
  • weekday: 可能な値は longshortnarrow です。
  • : 指定可能な値は、数値2桁です。
  • timeZone: 可能な値は IANA タイムゾーン データベースです。
  • timeZoneName: 可能な値は longshort です。
  • hour12: 24 時間周期または 12 時間周期。可能な値は truefalse です。

以下に使用例を示します。

var d = 新しい日付(2013, 0, 1);

d.toLocaleDateString('en-US', {
  平日: '長い'、
  年: '数値',
  月: '長い'、
  日: '数値'
})
// "2013 年 1 月 1 日火曜日"

d.toLocaleDateString('en-US', {
  日: "2桁"、
  月:「長い」、
  年:「2桁」
});
// "13 年 1 月 1 日"

d.toLocaleTimeString('en-US', {
  タイムゾーン: 'UTC'、
  タイムゾーン名: '短い'
})
// "午後 4:00:00 UTC"

d.toLocaleTimeString('en-US', {
  タイムゾーン: 'アジア/上海',
  タイムゾーン名: '長い'
})
// "中国標準時間午前 12:00:00"

d.toLocaleTimeString('en-US', {
  時間12: false
})
// "00:00:00"

d.toLocaleTimeString('en-US', {
  時間12: true
})
// "午前 12:00:00"

クラスメソッドを取得

Date オブジェクトは、インスタンス オブジェクトの特定の側面の値を取得するための一連の get* メソッドを提供します。

  • getTime(): 1970 年 1 月 1 日の 00:00:00 からのミリ秒数を返します。これは、valueOf メソッドと同等です。
  • getDate(): インスタンス オブジェクトに対応する各月の日を返します (1 から始まります)。
  • getDay(): 曜日を返します。日曜日は 0、月曜日は 1 などとなります。
  • getFull Year(): 4 桁の年を返します。
  • getMonth(): 月を返します (0 は 1 月を意味し、11 は 12 月を意味します)。
  • getHours(): 時間 (0 ~ 23) を返します。
  • getMilliseconds(): ミリ秒 (0 ~ 999) を返します。
  • getMinutes(): 分 (0 ~ 59) を返します。
  • getSeconds(): 秒 (0 ~ 59) を返します。
  • getTimezoneOffset(): 現在時刻と UTC の間のタイムゾーンの差を分単位で返します。返される結果には夏時間要素が考慮されます。

これらすべての get* メソッドは整数を返しますが、メソッドによって戻り値の範囲は異なります。

  • 分と秒: 0 ~ 59
  • 営業時間: 0 ~ 23 ・曜日:0(日)~6(土)
  • 日付: 1 ~ 31
  • 月: 0 (1月) ~ 11 (12月)
var d = 新しい日付('2013 年 1 月 6 日');

d.getDate() // 6
d.getMonth() // 0
d.getFull Year() // 2013
d.getTimezoneOffset() // -480

上記のコードでは、最後の行は「-480」を返します。これは、UTC 時間から現在時間を分単位で引いたものです。 「-480」は、UTC が現在時刻より 480 分少ないこと、つまり、現在のタイムゾーンが UTC より 8 時間進んでいることを意味します。

以下は、今年の残り日数を計算する例です。

関数 leftDays() {
  var today = new Date();
  var end Year = new Date(today.getFull Year(), 11, 31, 23, 59, 59, 999);
  var msPerDay = 24 * 60 * 60 * 1000;
  return Math.round((endyear.getTime() - today.getTime()) / msPerDay);
}

上記の get* メソッドは、現在のタイム ゾーンの時刻を返します。 Date オブジェクトは、UTC 時刻を返すために使用される、これらのメソッドに対応する UTC バージョンも提供します。

  • getUTCDate()
  • getUTCFulyear()
  • getUTCMonth()
  • getUTCDay()
  • getUTCHours()
  • getUTCMinutes()
  • getUTCSeconds()
  • getUTCミリ秒()
var d = 新しい日付('2013 年 1 月 6 日');

d.getDate() // 6
d.getUTCDate() // 5

上記のコードでは、インスタンス オブジェクト d は現在のタイム ゾーン (東部第 8 タイム ゾーン) での 1 月 6 日の 0:00:00 を表しているため、getDate メソッドは戻ります。 6、UTC タイムゾーンの場合は 1 月 5 日なので、getUTCDate メソッドは 5 を返します。

クラスメソッドの設定

Date オブジェクトは、インスタンス オブジェクトのさまざまな側面を設定するための一連の set* メソッドを提供します。

  • setDate(date): インスタンス オブジェクトに対応する各月の日 (1 ~ 31) を設定し、変更後のタイムスタンプをミリ秒単位で返します。
  • setFullyear(年[,月,日]): 4桁の年を設定します。
  • setHours(hour [, min, sec, ms]): 時間を設定します (0 ~ 23)。
  • setMilliseconds(ms): ミリ秒 (0 ~ 999) を設定します。
  • setMinutes(min [, sec, ms]): 分を設定します (0 ~ 59)。
  • setMonth(month [, date]): 月を設定します(0-11)。
  • setSeconds(sec [, ms]): 秒(0-59)を設定します。
  • setTime(milliseconds): ミリ秒のタイムスタンプを設定します。

これらのメソッドは基本的に get* メソッドと 1 対 1 で対応しますが、曜日は設定ではなく計算されるため、setDay メソッドはありません。なお、月の設定は0から計算され、「0」が1月、「11」が12月となります。

var d = 新しい日付 ('2013 年 1 月 6 日');

d // 2013 年 1 月 6 日日曜日 00:00:00 GMT+0800 (CST)
d.setDate(9) // 1357660800000
d // 2013 年 1 月 9 日水曜日 00:00:00 GMT+0800 (CST)

set* メソッドのパラメータは自動的に変換されます。 setDate() を例にとると、パラメータが当月の最大日数を超えた場合、パラメータが負の数の場合は、その日数を差し引いた値を意味します。前月の末日。

var d1 = 新しい日付('2013 年 1 月 6 日');

d1.setDate(32) // 1359648000000
d1 // 2013 年 2 月 1 日金曜日 00:00:00 GMT+0800 (CST)

var d2 = 新しい日付 ('2013 年 1 月 6 日');

d2.setDate(-1) // 1356796800000
d2 // 2012 年 12 月 30 日日曜日 00:00:00 GMT+0800 (CST)

上記のコードでは、d1.setDate(32) によって日付が 1 月 32 日に設定されます。1 月には 31 日しかないため、自動的に 2 月 1 日に変換されます。 d2.setDate(-1) は、前月の最後から 2 番目の日、つまり 12 月 30 日に設定することを意味します。

set クラス メソッドと get クラス メソッドを一緒に使用して、相対時間を取得できます。

var d = 新しい日付();

// 日付を 1000 日前に戻す
d.setDate(d.getDate() + 1000);
// 時刻を 6 時間後に設定します
d.setHours(d.getHours() + 6);
//年を昨年に設定します
d.setFull Year(d.getFull Year() - 1);

setTime() に加えて、set* 一連のメソッドはすべて対応する UTC バージョンを持っています。つまり、UTC タイムゾーンで時刻を設定します。

  • setUTCDate()
  • setUTCFulyear()
  • setUTCHours()
  • setUTCミリ秒()
  • setUTCMinutes()
  • setUTCMonth()
  • setUTCSeconds()
var d = 新しい日付('2013 年 1 月 6 日');
d.getUTCHours() // 16
d.setUTCHours(22) // 1357423200000
d // 2013 年 1 月 6 日日曜日 06:00:00 GMT+0800 (CST)

上記のコードでは、ローカル タイム ゾーン (東部タイム ゾーン) での 1 月 6 日の 0:00 は、UTC タイム ゾーンでは前日の午後 16:00 になります。 UTC タイム ゾーンの 22:00 を過ぎると、ローカル タイム ゾーンの午前 6:00 になります。

参考リンク


作者: wangdoc

アドレス: https://wangdoc.com/

ライセンス: クリエイティブ・コモンズ 3.0