微信小程序开发文档 SDK数据库 Command·聚合操作符·日期操作符

2024-02-25 开发教程 微信小程序开发文档 匿名 3

AggregateCommand.dateFromParts(value: any): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。给定日期的相关信息,构建并返回一个日期对象。

参数

value: any

返回值

Object

API 说明

语法如下:

db.command.aggregate.dateFromParts({
year: <year>,
month: <month>,
day: <day>,
hour: <hour>,
minute: <minute>,
second: <second>,
millisecond: <ms>,
timezone: <tzExpression>
})

你也可以使用 ISO 8601 的标准:

db.command.aggregate.dateFromParts({
isoWeekYear: <year>,
isoWeek: <week>,
isoDayOfWeek: <day>,
hour: <hour>,
minute: <minute>,
second: <second>,
millisecond: <ms>,
timezone: <tzExpression>
})

示例代码

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
date: $.dateFromParts({
year: 2017,
month: 2,
day: 8,
hour: 12,
timezone: 'America/New_York'
}),
})
.end()

输出如下:

{
"date": ISODate("2017-02-08T17:00:00.000Z")
}

AggregateCommand.dateFromString(value: any): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。将一个日期/时间字符串转换为日期对象

参数

value: any

返回值

Object

API 说明

语法如下:

db.command.aggregate.dateFromString({
dateString: <dateStringExpression>,
timezone: <tzExpression>
})

示例代码

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
date: $.dateFromString({
dateString: "2019-05-14T09:38:51.686Z"
})
})
.end()

输出如下:

{
"date": ISODate("2019-05-14T09:38:51.686Z")
}

AggregateCommand.dateToString(value: any): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。根据指定的表达式将日期对象格式化为符合要求的字符串。

参数

value: any

返回值

Object

API 说明

dateToString 的调用形式如下:

db.command.aggregate.dateToString({
date: <日期表达式>,
format: <格式化表达式>,
timezone: <时区表达式>,
onNull: <空值表达式>
})

下面是四种表达式的详细说明:

名称描述
日期表达式必选。指定字段值应该是能转化为字符串的日期。
格式化表达式可选。它可以是任何包含“格式说明符”的有效字符串。
时区表达式可选。指明运算结果的时区。它可以解析格式为 UTC Offset 或者 Olson Timezone Identifier 的字符串。
空值表达式可选。当 <日期表达式>返回空或者不存在的时候,会返回此表达式指明的值。

下面是格式说明符的详细说明:

说明符描述合法值
%d月份的日期(2位数,0填充)01 - 31
%GISO 8601 格式的年份0000 - 9999
%H小时(2位数,0填充,24小时制)00 - 23
%j一年中的一天(3位数,0填充)001 - 366
%L毫秒(3位数,0填充)000 - 999
%m月份(2位数,0填充)01 - 12
%M分钟(2位数,0填充)00 - 59
%S秒(2位数,0填充)00 - 60
%w星期几1 - 7
%uISO 8601 格式的星期几1 - 7
%U一年中的一周(2位数,0填充)00 - 53
%VISO 8601 格式的一年中的一周1 - 53
%Y年份(4位数,0填充)0000 - 9999
%z与 UTC 的时区偏移量

+/-[hh][mm]

%Z以分钟为单位,与 UTC 的时区偏移量

+/-mmm

%%百分号作为字符

%

示例代码

假设集合 students 有如下记录:

{ "date": "1999-12-11T16:00:00.000Z", "firstName": "Yuanxin", "lastName": "Dong" }
{ "date": "1998-11-10T16:00:00.000Z", "firstName": "Weijia", "lastName": "Wang" }
{ "date": "1997-10-09T16:00:00.000Z", "firstName": "Chengxi", "lastName": "Li" }

格式化日期

下面是将 date 字段的值,格式化成形如 年份-月份-日期 的字符串:

const $ = db.command.aggregate
db
.collection('students')
.aggregate()
.project({
_id: 0,
formatDate: $.dateToString({
date: '$date',
format: '%Y-%m-%d'
})
})
.end()

返回的结果如下:

{ "formatDate": "1999-12-11" }
{ "formatDate": "1998-11-10" }
{ "formatDate": "1997-10-09" }

时区时间

下面是将 date 字段值格式化为上海时区时间的例子:

const $ = db.command.aggregate
db
.collection('students')
.aggregate()
.project({
_id: 0,
formatDate: $.dateToString({
date: '$date',
format: '%H:%M:%S',
timezone: 'Asia/Shanghai'
})
})
.end()

返回的结果如下:

{ "formatDate": "00:00:00" }
{ "formatDate": "00:00:00" }
{ "formatDate": "00:00:00" }

缺失情况的默认值

当指定的 <日期表达式> 返回空或者不存在的时候,可以设置缺失情况下的默认值:

const $ = db.command.aggregate
db
.collection('students')
.aggregate()
.project({
_id: 0,
formatDate: $.dateToString({
date: '$empty',
onNull: 'null'
})
})
.end()

返回的结果如下:

{ "formatDate": "null" }
{ "formatDate": "null" }
{ "formatDate": "null" }

AggregateCommand.dayOfMonth(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的天数(一个月中的哪一天),是一个介于 1 至 31 之间的数字。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

语法如下:

db.command.aggregate.dayOfMonth(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 dayOfMonth() 对 date 字段进行投影,获取对应的日期:

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
dayOfMonth: $.dayOfMonth('$date')
})
.end()

输出如下:

{
"dayOfMonth": 14
}

AggregateCommand.dayOfWeek(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的天数(一周中的第几天),是一个介于 1(周日)到 7(周六)之间的整数。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

注意:周日是每周的第 1 天*

语法如下:

db.command.aggregate.dayOfWeek(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 dayOfWeek() 对 date 字段进行投影,获取对应的天数(一周中的第几天):

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
dayOfWeek: $.dayOfWeek('$date')
})
.end()

输出如下:

{
"dayOfWeek": 3
}

AggregateCommand.dayOfYear(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的天数(一年中的第几天),是一个介于 1 到 366 之间的整数。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

语法如下:

db.command.aggregate.dayOfYear(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 dayOfYear() 对 date 字段进行投影,获取对应的天数(一年中的第几天):

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
dayOfYear: $.dayOfYear('$date')
})
.end()

输出如下:

{
"dayOfYear": 134
}

AggregateCommand.hour(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的小时数,是一个介于 0 到 23 之间的整数。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

语法如下:

db.command.aggregate.hour(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 hour() 对 date 字段进行投影,获取对应的小时数:

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
hour: $.hour('$date')
})
.end()

输出如下:

{
"hour": 9
}

AggregateCommand.isoDayOfWeek(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的 ISO 8601 标准的天数(一周中的第几天),是一个介于 1(周一)到 7(周日)之间的整数。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

语法如下:

db.command.aggregate.month(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 month() 对 date 字段进行投影,获取对应的 ISO 8601 标准的天数(一周中的第几天):

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
isoDayOfWeek: $.isoDayOfWeek('$date')
})
.end()

输出如下:

{
"isoDayOfWeek": 2
}

AggregateCommand.isoWeek(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的 ISO 8601 标准的周数(一年中的第几周),是一个介于 1 到 53 之间的整数。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

根据 ISO 8601 标准,周一到周日视为一周,本年度第一个周四所在的那周,视为本年度的第 1 周。

例如:2016 年 1 月 7 日是那年的第一个周四,那么 2016.01.04(周一)到 2016.01.10(周日) 即为第 1 周。同理,2016 年 1 月 1 日的周数为 53。

语法如下:

db.command.aggregate.isoWeek(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 isoWeek() 对 date 字段进行投影,获取对应的 ISO 8601 标准的周数(一年中的第几周):

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
isoWeek: $.isoWeek('$date')
})
.end()

输出如下:

{
"isoWeek": 20
}

AggregateCommand.isoWeekYear(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的 ISO 8601 标准的天数(一年中的第几天)。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

此处的“年”以第一周的周一为开始,以最后一周的周日为结束。

语法如下:

db.command.aggregate.isoWeekYear(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 isoWeekYear() 对 date 字段进行投影,获取对应的 ISO 8601 标准的天数(一年中的第几天):

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
isoWeekYear: $.isoWeekYear('$date')
})
.end()

输出如下:

{
"isoWeekYear": 2019
}

AggregateCommand.millisecond(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的毫秒数,是一个介于 0 到 999 之间的整数。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

语法如下:

db.command.aggregate.millisecond(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 millisecond() 对 date 字段进行投影,获取对应的毫秒数:

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
millisecond: $.millisecond('$date'),
})
.end()

输出如下:

{
"millisecond": 686
}

AggregateCommand.minute(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的分钟数,是一个介于 0 到 59 之间的整数。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

语法如下:

db.command.aggregate.minute(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 minute() 对 date 字段进行投影,获取对应的分钟数:

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
minute: $.minute('$date')
})
.end()

输出如下:

{
"minute": 38
}

AggregateCommand.month(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的月份,是一个介于 1 到 12 之间的整数。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

语法如下:

db.command.aggregate.month(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 month() 对 date 字段进行投影,获取对应的月份:

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
month: $.month('$date')
})
.end()

输出如下:

{
"month": 5
}

AggregateCommand.second(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的秒数,是一个介于 0 到 59 之间的整数,在特殊情况下(闰秒)可能等于 60。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

语法如下:

db.command.aggregate.second(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 second() 对 date 字段进行投影,获取对应的秒数:

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
second: $.second('$date')
})
.end()

输出如下:

{
"second": 51
}

AggregateCommand.week(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的周数(一年中的第几周),是一个介于 0 到 53 之间的整数。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

每周以周日为开头,每年的第一个周日即为 week 1 的开始,这天之前是 week 0。

语法如下:

db.command.aggregate.week(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 week() 对 date 字段进行投影,获取对应的周数(一年中的第几周):

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
week: $.week('$date')
})
.end()

输出如下:

{
"week": 19
}

AggregateCommand.year(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。返回日期字段对应的年份。

参数

value: Expression<string>

日期字段

返回值

Object

API 说明

语法如下:

db.command.aggregate.year(<日期字段>)

示例代码

假设集合 dates 有以下文档:

{
"_id": 1,
"date": ISODate("2019-05-14T09:38:51.686Z")
}

我们使用 year() 对 date 字段进行投影,获取对应的年份:

const $ = db.command.aggregate
db
.collection('dates')
.aggregate()
.project({
_id: 0,
year: $.year('$date')
})
.end()

输出如下:

{
"year": 2019
}

AggregateCommand.subtract(value: Expression[]): Object

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合操作符。将两个数字相减然后返回差值,或将两个日期相减然后返回相差的毫秒数,或将一个日期减去一个数字返回结果的日期。

参数

value: Expression[]

[<expression1>, <expression2>]

返回值

Object

API 说明

语法如下:

db.command.aggregate.subtract([<expression1>, <expression2>])

参数可以是任意解析为数字或日期的表达式。

示例代码

假设集合 scores 有如下记录:

{ "_id": 1, "max": 10, "min": 1 }
{ "_id": 2, "max": 7, "min": 5 }
{ "_id": 3, "max": 6, "min": 6 }

求各个记录的 max 和 min 的差值。:

const $ = db.command.aggregate
db.collection('scores').aggregate()
.project({
diff: $.subtract(['$max', '$min'])
})
.end()

返回结果如下:

{ "_id": 1, "diff": 9 }
{ "_id": 2, "diff": 2 }
{ "_id": 3, "diff": 0 }