Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$dateFromString ( operador de expressão )

$dateFromString

Converte uma string de data/hora em um objeto de data.

The $dateFromString expression has the following syntax:

{ $dateFromString: {
dateString: <dateStringExpression>,
format: <formatStringExpression>,
timezone: <tzExpression>,
onError: <onErrorExpression>,
onNull: <onNullExpression>
} }

The $dateFromString takes a document with the following fields:

Campo
Descrição

dateString

A string de data/hora para converter para um objeto de data. Consulte Date() para mais informações sobre formatos de data/hora.

Se especificar a opção timezone para o operador, não inclua informações de fuso horário no dateString.

format

Opcional. A especificação do formato de data do dateString. O format pode ser qualquer expressão que avalia para uma string literal, contendo 0 ou mais especificadores de formato. Para obter uma lista de especificadores disponíveis, consulte Formatar especificadores.

If unspecified, $dateFromString uses "%Y-%m-%dT%H:%M:%S.%LZ" as the default format but accepts a variety of formats and attempts to parse the dateString if possible.

timezone

Opcional. O fuso horário a ser usado para formatar a data.

Se o argumento dateString estiver formatado como "2017-02-08T12:10:40,787Z", no qual o "Z" no final indica a hora de Zulu (fuso horário UTC), você não poderá especificar o argumento timezone.

<timezone> permite as seguintes opções e expressões que avaliam para eles:

  • an Olson Timezone Identifier, such as "Europe/London" or "America/New_York", or

  • um deslocamento UTC no formato:

    • +/-[hh]:[mm], e.g. "+04:45" ou

    • +/-[hh][mm], e.g. "-0530" ou

    • +/-[hh], e.g. "+03" ou

  • As strings "Z", "UTC" ou "GMT"

Para mais informações sobre expressões, consulte Expressões.

onError

Optional. If $dateFromString encounters an error while parsing the given dateString, it outputs the result value of the provided onError expression. This result value can be of any type.

If you do not specify onError, $dateFromString throws an error if it cannot parse dateString.

onNull

Optional. If the dateString provided to $dateFromString is null or missing, it outputs the result value of the provided onNull expression. This result value can be of any type.

If you do not specify onNull and dateString is null or missing, then $dateFromString outputs null.

Exemplo
Resultados
{ $dateFromString: {
dateString: "2017-02-08T12:10:40.787"
} }

ISODate("2017-02-08T12:10:40.787Z")

{ $dateFromString: {
dateString: "2017-02-08T12:10:40.787",
timezone: "America/New_York"
} }

ISODate("2017-02-08T17:10:40.787Z")

{ $dateFromString: {
dateString: "2017-02-08"
} }

ISODate("2017-02-08T00:00:00Z")

{ $dateFromString: {
dateString: "oct 20 2020"
} }

ISODate("2020-10-20T00:00:00.000Z")

{ $dateFromString: {
dateString: "06-15-2018",
format: "%m-%d-%Y"
} }

ISODate("2018-06-15T00:00:00Z")

{ $dateFromString: {
dateString: "15-06-2018",
format: "%d-%m-%Y"
} }

ISODate("2018-06-15T00:00:00Z")

{ $dateFromString: {
dateString: "WED jan 31 12:05:28 +03:30 1996"
} }

ISODate("1996-01-31T08:35:28.000Z")

Os seguintes especificadores de formato estão disponíveis para uso no <formatString>:

Especificadores
Descrição
Valores possíveis

%b

Mês abreviado (3 letras)

jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec

%B

Nome do mês inteiro

january-december

%d

Dia do mês (2 dígitos, zero acolchoado)

01-31

%G

Ano no formato ISO 8601

0000-9999

%H

Hora (2 dígitos, zero acolchoado, relógio de 24 horas)

00-23

%j

Dia do ano (3 dígitos, zero preenchido)

001-366

%L

Milissegundo (3 dígitos, zero preenchido)

000-999

%m

Mês (2 dígitos, zero preenchido)

01-12

%M

Minuto (2 dígitos, zero preenchido)

00-59

%S

Segundo (2 dígitos, zero preenchido)

00-60

%u

Número do dia da semana no formato ISO 8601 (1-segunda, 7-domingo)

1-7

%U

Semana do ano (2 dígitos, zero preenchido)

00-53

%V

Semana do ano no formato ISO 8601

1-53

%w

Dia da semana como número inteiro (0-domingo, 6-sábado)

0-6

%Y

Ano (4 dígitos, zero preenchido)

0000-9999

%z

Deslocamento do fuso horário de UTC.

+/-[hh][mm]

%Z

Os minutos são compensados do UTC como um número. Por exemplo, se o deslocamento de fuso horário (+/-[hhmm]) foi +0445, o deslocamento de minutos é +285.

+/-mmm

%%

Caractere percentual como literal

%

Considere uma coleção logmessages que contenha os seguintes documentos com datas.

{ _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"}

A seguinte agregação utiliza $dateFromString para converter o valor date para um objeto de data:

db.logmessages.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: 'America/New_York'
}
}
}
} ] )

A agregação acima retorna os seguintes documentos e converte cada campo date para o fuso horário Fuso Horário Oriental (Eastern Time Zone):

{ "_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") }

O argumento timezone também pode ser fornecido através de um campo de documento em vez de um argumento codificado. Por exemplo:

db.logmessages.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: '$timezone'
}
}
}
} ] )

A agregação acima retorna os seguintes documentos e converte cada campo date em suas respectivas representações 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") }

If your collection contains documents with unparsable date strings, $dateFromString throws an error unless you provide an aggregation expression to the optional onError parameter.

Por exemplo, dada uma coleção dates com os seguintes documentos:

{ "_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" }

Você pode usar o parâmetro onError para retornar a data inválida em seu formato de string original:

db.dates.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: '$timezone',
onError: '$date'
}
}
}
} ] )

Isso retorna os seguintes documentos:

{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : "20177-02-09T03:35:02.055" }

If your collection contains documents with null date strings, $dateFromString returns null unless you provide an aggregation expression to the optional onNull parameter.

Por exemplo, dada uma coleção dates com os seguintes documentos:

{ "_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:

db.dates.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: '$timezone',
onNull: new Date(0)
}
}
}
} ] )

Isso retorna os seguintes documentos:

{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : ISODate("1970-01-01T00:00:00Z") }