On this page本页内容
$dateFromParts
Constructs and returns a Date object given the date's constituent properties.构造并返回给定日期组成属性的日期对象。
The $dateFromParts
expression has the following syntax:$dateFromParts
表达式语法如下:
{ $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:您还可以使用以下语法以ISO周日期格式指定组成日期字段:
{ $dateFromParts : { 'isoWeekYear': <year>, 'isoWeek': <week>, 'isoDayOfWeek': <day>, 'hour': <hour>, 'minute': <minute>, 'second': <second>, 'millisecond': <ms>, 'timezone': <tzExpression> } }
The $dateFromParts
takes a document with the following fields:$dateFromParts
接受具有以下字段的文档:
You cannot combine the use of calendar dates and ISO week date fields when constructing your 在构造$dateFromParts
input document.$dateFromParts
输入文档时,不能同时使用日历日期和ISO周日期字段。
year | isoWeekYear isoWeekYear ,则为必填项 |
$dateFromParts errors. $dateFromParts 错误。1 . 1 。0 .0 。
|
isoWeekYear | year year ,则为必填项 |
$dateFromParts errors. $dateFromParts 错误。1 . 1 。0 .0 。
|
month | year .year 一起使用。 |
$dateFromParts incorporates the difference in the date calculation. $dateFromParts 将在日期计算中包含差异。 |
isoWeek | isoWeekYear .isoWeekYear 一起使用。 |
$dateFromParts incorporates the difference in the date calculation. $dateFromParts 将在日期计算中包含差异。 |
day | year .year 一起使用。 |
$dateFromParts incorporates the difference in the date calculation. $dateFromParts 将在日期计算中包含差异。 |
isoDayOfWeek | isoWeekYear .isoWeekYear 一起使用。 |
Defaults to
$dateFromParts incorporates the difference in the date calculation. $dateFromParts 将在日期计算中包含差异。 |
hour |
$dateFromParts incorporates the difference in the date calculation. $dateFromParts 将在日期计算中包含差异。 | |
minute |
| |
second |
$dateFromParts incorporates the difference in the date calculation. $dateFromParts 将在日期计算中包含差异。 | |
millisecond |
$dateFromParts incorporates the difference in the date calculation. $dateFromParts 将在日期计算中包含差异。 | |
timezone |
|
Starting in MongoDB 4.4, the supported value range for 从MongoDB 4.4开始,支持的year
and isoWeekYear
is 1-9999
. year
和isoWeekYear
值范围为1-9999
。In prior versions of MongoDB, the lower bound for these values was 在早期版本的MongoDB中,这些值的下限为0
and the supported value range was 0-9999
.0
,支持的值范围为0-9999
。
Starting in MongoDB 4.0, if the value specified for fields other than 从MongoDB 4.0开始,如果为除year
, isoWeekYear
, and timezone
is outside the valid range, $dateFromParts
carries or subtracts the difference from other date parts to calculate the date.year
、isoWeekYear
和timezone
之外的字段指定的值超出有效范围,$dateFromParts
携带或减去其他日期部分的差异,以计算日期。
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
表达式,其中month
字段值为14
,比12个月(或1年)的最大值大2个月:
{ $dateFromParts: { 'year' : 2017, 'month' : 14, 'day': 1, 'hour' : 12 } }
The expression calculates the date by increasing the 表达式通过将year
by 1 and setting the month
to 2 to return: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
表达式,其中month
字段值为0
,比1个月的最小值小1个月:
{ $dateFromParts: { 'year' : 2017, 'month' : 0, 'day': 1, 'hour' : 12 } }
The expression calculates the date by decreasing the 表达式通过将year
by 1 and setting the month
to 12 to return:year
减1并将month
设置为12来计算日期,以返回:
ISODate("2016-12-01T12:00:00Z")
When using an Olson Timezone Identifier in the 当在<timezone>
field, MongoDB applies the DST offset if applicable for the specified timezone.<timezone>
字段中使用奥尔森时区标识符时,MongoDB将应用DST偏移(如果适用于指定时区)。
For example, consider a 例如,考虑具有以下文档的sales
collection with the following document:sales
集合:
{ "_id" : 1, "item" : "abc", "price" : 20, "quantity" : 5, "date" : ISODate("2017-05-20T10:24:51.303Z") }
The following aggregation illustrates how MongoDB handles the DST offset for the Olson Timezone Identifier. 以下聚合说明了MongoDB如何处理Olson时区标识符的DST偏移。The example uses the 示例使用$hour
and $minute
operators to return the corresponding portions of the date
field:$hour
和$minute
运算符返回日期字段的相应部分:
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" } } } }])
The operation returns the following result:该操作返回以下结果:
{ "_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:$dateFromParts
从提供的输入字段构造三个日期对象:
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' } } } }])
The operation returns the following result:该操作返回以下结果:
{ "_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") }