$dateFromString (aggregation)
On this page本页内容
Definition定义
$dateFromString-
Converts a date/time string to a date object.将日期/时间字符串转换为日期对象。The$dateFromStringexpression has the following syntax:$dateFromString表达式具有以下语法:{ $dateFromString: {
dateString: <dateStringExpression>,
format: <formatStringExpression>,
timezone: <tzExpression>,
onError: <onErrorExpression>,
onNull: <onNullExpression>
} }The$dateFromStringtakes a document with the following fields:$dateFromString接受一个具有以下字段的文档:Field字段Description描述dateStringThe date/time string to convert to a date object.要转换为日期对象的日期/时间字符串。See有关日期/时间格式的详细信息,请参阅Date()for more information on date/time formats.Date()。NoteIf specifying the如果为运算符指定timezoneoption to the operator, do not include time zone information in thedateString.timezone选项,请不要在dateString中包含时区信息。formatOptional.可选的。The date format specification of thedateString.dateString的日期格式规范。Theformatcan be any expression that evaluates to a string literal, containing 0 or more format specifiers.format可以是任何计算结果为字符串文字的表达式,其中包含0个或多个格式说明符。For a list of specifiers available, see Format Specifiers.有关可用说明符的列表,请参阅格式说明符。
If unspecified,如果未指定,$dateFromStringuses"%Y-%m-%dT%H:%M:%S.%LZ"as the default format but accepts a variety of formats and attempts to parse thedateStringif possible.$dateFromString将使用"%Y-%m-%dT%H:%M:%S.%LZ"作为默认格式,但接受多种格式,并在可能的情况下尝试解析dateString。timezoneOptional.可选的。The time zone to use to format the date.用于设置日期格式的时区。NoteIf the如果dateStringargument is formatted like '2017-02-08T12:10:40.787Z', in which the 'Z' at the end indicates Zulu time (UTC time zone), you cannot specify thetimezoneargument.dateString参数的格式类似'2017-02-08T12:10:40.787Z',其中末尾的'Z'表示祖鲁时间(UTC时区),则无法指定时区参数。<timezone>allows for the following options and expressions that evaluate to them:允许以下选项和计算结果为它们的表达式:an Olson Timezone Identifier奥尔森时区标识符, such as
"Europe/London"or"America/New_York", or,如
"Europe/London"或"America/New_York",或a UTC offset in the form:UTC偏移量,格式为:+/-[hh]:[mm], e.g."+04:45", or+/-[hh][mm], e.g."-0530", or+/-[hh], e.g."+03", or
The strings字符串"Z","UTC", or"GMT""Z"、"UTC"或"GMT"
For more information on expressions, see Expressions.有关表达式的详细信息,请参阅表达式。onErrorOptional.可选的。If如果$dateFromStringencounters an error while parsing the givendateString, it outputs the result value of the providedonErrorexpression.$dateFromString在解析给定的dateString时遇到错误,它将输出所提供的onError表达式的结果值。This result value can be of any type.此结果值可以是任何类型。
If you do not specify如果未指定onError,$dateFromStringthrows an error if it cannot parsedateString.onError,$dateFromString在无法解析dateString时会抛出错误。onNullOptional.可选的。If the如果提供给dateStringprovided to$dateFromStringisnullor missing, it outputs the result value of the providedonNullexpression.$dateFromString的dateString为null或缺失,它将输出提供的onNull表达式的结果值。This result value can be of any type.此结果值可以是任何类型。
If you do not specify如果未指定onNullanddateStringisnullor missing, then$dateFromStringoutputsnull.onNull,并且dateString为null或缺失,则$dateFromString输出null。
Behavior行为
{ $dateFromString: {
| ISODate("2017-02-08T12:10:40.787Z") |
{ $dateFromString: {
| ISODate("2017-02-08T17:10:40.787Z") |
{ $dateFromString: {
| ISODate("2017-02-08T00:00:00Z") |
{ $dateFromString: {
| ISODate("2020-10-20T00:00:00.000Z") |
{ $dateFromString: {
| ISODate("2018-06-15T00:00:00Z") |
{ $dateFromString: {
| ISODate("2018-06-15T00:00:00Z") |
{ $dateFromString: {
| ISODate("1996-01-31T08:35:28.000Z") |
Format Specifiers格式规范
The following format specifiers are available for use in the 以下格式说明符可用于<formatString>:<formatString>:
%b | Abbreviated month (3 letters) | jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec |
%B | Full month name | january-december |
%d | Day of month (2 digits, zero padded) | 01-31 |
%G | Year in ISO 8601 format | 0000-9999 |
%H | Hour (2 digits, zero padded, 24-hour clock) | 00-23 |
%j | Day of year (3 digits, zero padded) | 001-366 |
%L | Millisecond (3 digits, zero padded) | 000-999 |
%m | Month (2 digits, zero padded) | 01-12 |
%M | 00-59 | |
%S | 00-60 | |
%u | 1-7 | |
%U | 00-53 | |
%V | 1-53 | |
%w | 0-6 | |
%Y | 0000-9999 | |
%z | +/-[hh][mm] | |
%Z | +/-[hhmm]) was +0445, the minutes offset is +285. | +/-mmm例如,如果时区偏移量(+/-hhmm])为+0445,则分钟偏移量为+285+/-mmm |
%% | % |
Examples实例
Converting Dates转换日期
Consider a collection 考虑一个包含以下带日期的文档的集合logmessages that contains the following documents with dates.logmessages。
{ _id: 1, date: "2017-02-08T12:10:40.787", timezone: "America/New_York", message: "Step 1: Started" },
{ _id: 2, date: "2017-02-08", timezone: "-05:00", message: "Step 1: Ended" },
{ _id: 3, message: " Step 1: Ended " },
{ _id: 4, date: "2017-02-09", timezone: "Europe/London", message: "Step 2: Started"},
{ _id: 5, date: "2017-02-09T03:35:02.055", timezone: "+0530", message: "Step 2: In Progress"}
The following aggregation uses $dateFromString to convert the 以下聚合使用date value to a date object:$dateFromString将date值转换为日期对象:
db.logmessages.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: 'America/New_York'
}
}
}
} ] )
The above aggregation returns the following documents and converts each 上述聚合返回以下文档,并将每个date field to the Eastern Time Zone:date字段转换为东部时区:
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : ISODate("2017-02-08T05:00:00Z") }
{ "_id" : 3, "date" : null }
{ "_id" : 4, "date" : ISODate("2017-02-09T05:00:00Z") }
{ "_id" : 5, "date" : ISODate("2017-02-09T08:35:02.055Z") }
The timezone argument can also be provided through a document field instead of a hard coded argument. timezone参数也可以通过文档字段而不是硬编码参数来提供。For example:例如:
db.logmessages.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: '$timezone'
}
}
}
} ] )
The above aggregation returns the following documents and converts each 上述聚合返回以下文档,并将每个date field to their respective UTC representations.date字段转换为各自的UTC表示形式。
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : ISODate("2017-02-08T05:00:00Z") }
{ "_id" : 3, "date" : null }
{ "_id" : 4, "date" : ISODate("2017-02-09T00:00:00Z") }
{ "_id" : 5, "date" : ISODate("2017-02-08T22:05:02.055Z") }
onError
If your collection contains documents with unparsable date strings, 如果您的集合包含具有不可解析日期字符串的文档,$dateFromString throws an error unless you provide an aggregation expression to the optional onError parameter.$dateFromString将抛出错误,除非您为可选的onError参数提供聚合表达式。
For example, given a collection 例如,给定具有以下文档的集合dates with the following documents:dates:
{ "_id" : 1, "date" : "2017-02-08T12:10:40.787", timezone: "America/New_York" },
{ "_id" : 2, "date" : "20177-02-09T03:35:02.055", timezone: "America/New_York" }
You can use the 您可以使用onError parameter to return the invalid date in its original string form:onError参数以原始字符串形式返回无效日期:
db.dates.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: '$timezone',
onError: '$date'
}
}
}
} ] )
This returns the following documents:这将返回以下文档:
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : "20177-02-09T03:35:02.055" }
onNull
If your collection contains documents with 如果集合包含日期字符串为null date strings, $dateFromString returns null unless you provide an aggregation expression to the optional onNull parameter.null的文档,$dateFromString将返回null,除非为可选的onNull参数提供聚合表达式。
For example, given a collection 例如,给定具有以下文档的集合dates with the following documents:dates:
{ "_id" : 1, "date" : "2017-02-08T12:10:40.787", timezone: "America/New_York" },
{ "_id" : 2, "date" : null, timezone: "America/New_York" }
You can use the 您可以使用onNull parameter to have $dateFromString return a date representing the unix epoch instead of null:onNull参数让$dateFromString返回一个表示unix epoch的日期,而不是null:
db.dates.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: '$timezone',
onNull: new Date(0)
}
}
}
} ] )
This returns the following documents:这将返回以下文档:
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : ISODate("1970-01-01T00:00:00Z") }