定義
$dateFromParts日付の構成プロパティを指定して Date オブジェクトを構築し返します。
The
$dateFromPartsexpression has the following syntax:{ $dateFromParts : { 'year': <year>, 'month': <month>, 'day': <day>, 'hour': <hour>, 'minute': <minute>, 'second': <second>, 'millisecond': <ms>, 'timezone': <tzExpression> } } 次の構文を使用して、ISO 週日付形式で構成日付フィールドを指定することもできます。
{ $dateFromParts : { 'isoWeekYear': <year>, 'isoWeek': <week>, 'isoDayOfWeek': <day>, 'hour': <hour>, 'minute': <minute>, 'second': <second>, 'millisecond': <ms>, 'timezone': <tzExpression> } } The
$dateFromPartstakes a document with the following fields:重要
You cannot combine the use of calendar dates and ISO week date fields when constructing your
$dateFromPartsinput document.フィールド必須/オプション説明yearを使用していない場合は必須
isoWeekYearisoWeekYearを使用していない場合は必須
yearmonth任意。
yearとのみ使用できます。月。 数値に評価される任意の式を指定できます。
デフォルトは
1です。値の範囲:
1-12指定された数値がこの範囲外の場合、
$dateFromPartsは日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。isoWeek任意。
isoWeekYearとのみ使用できます。年内の週。 数値に評価される任意の式を指定できます。
デフォルトは
1です。値の範囲:
1-53指定された数値がこの範囲外の場合、
$dateFromPartsは日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。day任意。
yearとのみ使用できます。日付。 数値に評価される任意の式を指定できます。
デフォルトは
1です。値の範囲:
1-31指定された数値がこの範囲外の場合、
$dateFromPartsは日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。isoDayOfWeek任意。
isoWeekYearとのみ使用できます。曜日( 月曜日
1- 日曜日7)。 数値に評価される任意の式を指定できます。デフォルトは
1です。値の範囲:
1-7指定された数値がこの範囲外の場合、
$dateFromPartsは日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。hour任意
時間。 数値に評価される任意の式を指定できます。
デフォルトは
0です。値の範囲:
0-23指定された数値がこの範囲外の場合、
$dateFromPartsは日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。minute任意
分。 数値に評価される任意の式を指定できます。
デフォルトは
0です。値の範囲:
0-59指定された数値がこの範囲外の場合、$dateFromPartsは日付の計算にその差を組み込みます。例については、「 値の範囲 」を参照してください。second任意
2 つ。 数値に評価される任意の式を指定できます。
デフォルトは
0です。値の範囲:
0-59指定された数値がこの範囲外の場合、
$dateFromPartsは日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。millisecond任意
ミリ秒。 数値に評価される任意の式を指定できます。
デフォルトは
0です。値の範囲:
0-999指定された数値がこの範囲外の場合、
$dateFromPartsは日付の計算に差を組み込みます。例については、「 値の範囲 」を参照してください。timezone任意
<timezone>は、値が次のいずれかの として評価される任意の 式string にすることができます。Olson タイムゾーン識別子(
"Europe/London"や"America/New_York"など)、または次の形式の UTC オフセット:
+/-[hh]:[mm]、例:"+04:45"、または+/-[hh][mm]、例:"-0530"、または+/-[hh], e.g."+03".
式の詳細については、「式 」を参照してください。
動作
値の範囲
yearとisoWeekYearでサポートされている値の範囲は1-9999です。
If the value specified for fields other than year, isoWeekYear, and timezone is outside the valid range, $dateFromParts carries or subtracts the difference from other date parts to calculate the date.
値が範囲より大きい
Consider the following $dateFromParts expression where the month field value is 14, which is 2 months greater than the maximum value of 12 months(or 1 year):
{ $dateFromParts: { 'year' : 2017, 'month' : 14, 'day': 1, 'hour' : 12 } }
式では、 yearを 1 増やし、 monthを 2 に設定して日付を計算し、以下を返します。
ISODate("2018-02-01T12:00:00Z")
値が範囲より小さい
Consider the following $dateFromParts expression where the month field value is 0, which is 1 month less than the minimum value of 1 month:
{ $dateFromParts: { 'year' : 2017, 'month' : 0, 'day': 1, 'hour' : 12 } }
式では、 yearを 1 減らし、 monthを 12 に設定して日付を計算すると次のように結果が返されます。
ISODate("2016-12-01T12:00:00Z")
タイムゾーン
<timezone> フィールドで Olson タイムゾーン識別子を使用する場合、MongoDB は指定されたタイムゾーンに該当する場合は DST オフセットを適用します。
たとえば、次のドキュメントを含む sales コレクションを考えます。
db.sales.insertOne( { "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:15:39.736Z") } )
次の集計は、MongoDB がタイムゾーン識別子の DST オフセットを取り扱う方法を示しています。この例では、$hour 演算子と $minute 演算子を使用して、date フィールドの対応する部分を返します。
db.sales.aggregate([ { $project: { "nycHour": { $hour: { date: "$date", timezone: "-05:00" } }, "nycMinute": { $minute: { date: "$date", timezone: "-05:00" } }, "gmtHour": { $hour: { date: "$date", timezone: "GMT" } }, "gmtMinute": { $minute: { date: "$date", timezone: "GMT" } }, "nycOlsonHour": { $hour: { date: "$date", timezone: "America/New_York" } }, "nycOlsonMinute": { $minute: { date: "$date", timezone: "America/New_York" } } } }])
この操作では、次の結果を返します。
{ "_id": 1, "nycHour" : 5, "nycMinute" : 24, "gmtHour" : 10, "gmtMinute" : 24, "nycOlsonHour" : 6, "nycOlsonMinute" : 24 }
例
The following aggregation uses $dateFromParts to construct three date objects from the provided input fields:
db.sales.aggregate([ { $project: { date: { $dateFromParts: { 'year' : 2017, 'month' : 2, 'day': 8, 'hour' : 12 } }, date_iso: { $dateFromParts: { 'isoWeekYear' : 2017, 'isoWeek' : 6, 'isoDayOfWeek' : 3, 'hour' : 12 } }, date_timezone: { $dateFromParts: { 'year' : 2016, 'month' : 12, 'day' : 31, 'hour' : 23, 'minute' : 46, 'second' : 12, 'timezone' : 'America/New_York' } } } }])
この操作では、次の結果を返します。
{ "_id" : 1, "date" : ISODate("2017-02-08T12:00:00Z"), "date_iso" : ISODate("2017-02-08T12:00:00Z"), "date_timezone" : ISODate("2017-01-01T04:46:12Z") }