定義
$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> } } You can also specify your constituent date fields in ISO week date format using the following syntax:
{ $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とのみ使用できます。isoWeek任意。
isoWeekYearとのみ使用できます。day任意。
yearとのみ使用できます。isoDayOfWeek任意。
isoWeekYearとのみ使用できます。hour任意
minute任意
second任意
millisecond任意
timezone任意
<timezone>は、値が次のいずれかの として評価される任意の 式string にすることができます。an Olson Timezone Identifier, such as
"Europe/London"or"America/New_York", or次の形式の 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.
値が範囲より大きい
次の$dateFromParts 式を考慮します。month フィールド値は14 であり、これは2 12か月(または1 年)の最大値よりも か月大きいです。
{ $dateFromParts: { 'year' : 2017, 'month' : 14, 'day': 1, 'hour' : 12 } }
式では、 yearを 1 増やし、 monthを 2 に設定して日付を計算し、以下を返します。
ISODate("2018-02-01T12:00:00Z")
値が範囲より小さい
次の$dateFromParts 式を考慮します。ここで、month フィールド値は0 であり、これは1 月の最小値よりも1 か月です。
{ $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") }