$dateDiff
聚合运算符返回两个日期只差。
语法
{
$dateDiff: {
startDate: <Expression>,
endDate: <Expression>,
unit: <Expression>,
timezone: <tzExpression>,
startOfWeek: <String>
}
}
结束日期endDate
减去开始日期startDate
,返回指定时间单位unit
的整数。
参数字段说明:
|字段|是否必须|描述|
|-|-|
|startDate
|是|开始时间,可以是任何合法的日期、时间戳或ObjectID表达式|
|startDate
|是|结束时间,可以是任何合法的日期、时间戳或ObjectID表达式|
|unit
|是|时间单位,可以是结果为year
、quarter
、week
、month
、day
、hour
、minute
、second
、millisecond
的表达式|
|timezone
|否|执行操作的时区,<tzExpression>
必须是能被解析为奥尔森时区标识符格式的字符串或UTC偏移量,如果timezone
不指定,返回值显示为UTC
|
|startOfWeek
|否|当单位unit
为week
时使用,默认为星期日,可以是结果为monday (or mon)
、tuesday (or tue)
、wednesday (or wed)
、thursday (or thu)
、friday (or fri)
、saturday (or sat)
、sunday (or sun)
之一的字符串表达式|
使用
没有小数单位
$dateDiff
表达式返回以指定单位计算的开始日期和结束日期之间的整数差,持续时间是通过计算通过单位边界的次数来确定的,例如,相差 18 个月的两个日期将返回1年的差值,而不是1.5年。
周的开始
除非通过参数startOfWeek
指定,否则一周的开始日期为周日。在指定日期的开始日期和结束日期之间开始的任何一周都会被计算在内。周计数不受日历月或日历年的限制。
时区
在<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
操作符返回日期字段的相应部分:
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":