On this page
$dateFromParts (aggregation)
在本页面
Definition
$dateFromParts
- 3.6 版的新功能。
给定日期的组成属性,构造并返回 Date 对象。
$dateFromParts表达式具有以下语法:
{
$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>
}
}
$dateFromParts
接收具有以下字段的文档:
Field | Required/Optional | Description | Possible Values |
---|---|---|---|
year |
如果不使用isoWeekYear ,则为必填 |
Calendar year. | 0 - 9999 |
isoWeekYear |
如果不使用year ,则为必填 |
ISO 周日期年份。 | 0 - 9999 |
month |
可选的。只能与year 一起使用。 |
月。默认为1 。 |
1 - 12 |
isoWeek |
可选的。只能与isoWeekYear 一起使用。 |
一年中的一周。默认为1 。 |
1 - 53 |
day |
可选的。只能与year 一起使用。 |
一个月中的某天。默认为1 。 |
1 - 31 |
isoDayOfWeek |
可选的。只能与isoWeekYear 一起使用。 |
星期几(星期一1 -星期日7 )。默认为1 。 |
1 - 7 |
hour |
Optional | 小时。默认为0 。 |
0 - 23 |
minute |
Optional | 分钟。默认为0 。 |
0 - 59 |
second |
Optional | 第二。默认为0 。 |
0 - 59 |
millisecond |
Optional | 毫秒。默认为0 。 |
0 - 999 |
timezone |
Optional | <timezone> 可以是任何expression,其结果为以下值之一的字符串: |
|
奥尔森时区标识符(例如 "Europe/London" 或"America/New_York" ),或UTC 偏移量,格式为: +/-[hh]:[mm] ,例如"+04:45" ,或+/-[hh][mm] ,例如"-0530" ,或+/-[hh] ,例如"+03" 。有关表达式的更多信息,请参见Expressions。 |
时区表达式 | 。 |
Important
构造$dateFromPartsImporting 文档时,不能结合使用 calendar 日期和 ISO 周日期字段。
Behavior
在<timezone>
字段中使用 Olson 时区标识符时,MongoDB 将应用 DST 偏移(如果适用于指定时区)。
例如,考虑包含以下文档的sales
集合:
{
"_id" : 1,
"item" : "abc",
"price" : 20,
"quantity" : 5,
"date" : ISODate("2017-05-20T10:24:51.303Z")
}
以下汇总说明了 MongoDB 如何处理 Olson 时区标识符的 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
}
Example
以下聚合使用$dateFromParts从提供的 Importing 字段中构造三个日期对象:
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")
}