Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$dateFromString (operador de expresión)

$dateFromString

Convierte una string de fecha/hora en un objeto de fecha.

La expresión $dateFromString tiene la siguiente sintaxis:

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

El $dateFromString procesa un documento con los siguientes campos:

Campo
Descripción

dateString

La string de fecha/hora para convertir a un objeto de fecha. Consulte Date() para obtener más información sobre los formatos de fecha/hora.

Si se especifica la timezone opción al operador, no incluir información de zona horaria en el dateString.

format

opcional. La especificación del formato de fecha de dateString. El format puede ser cualquier expresión que se evalúe como un literal de string, que contenga 0 o más especificadores de formato. Para ver una lista de los especificadores disponibles, consulte Especificadores de formato.

Si no se especifica, $dateFromString utiliza "%Y-%m-%dT%H:%M:%S.%LZ" como formato por defecto, pero acepta una variedad de formatos e intenta analizar el dateString si es posible.

timezone

opcional. La zona horaria que se utilizará para formatear la fecha.

Si el argumento dateString está formato como '2017-02-08T12:10:40.787Z', donde la 'Z' al final indica la hora Zulu (zona horaria UTC), no puedes especificar el argumento timezone.

<timezone> permite las siguientes opciones y expresiones que se evalúan como ellas:

  • un Identificador de zona horaria Olson, como "Europe/London" o "America/New_York", o

  • un desplazamiento UTC en la forma:

    • +/-[hh]:[mm]por ejemplo, "+04:45", o

    • +/-[hh][mm]por ejemplo, "-0530", o

    • +/-[hh]por ejemplo, "+03", o

  • Las cadenas "Z", "UTC" o "GMT"

Para obtener más información sobre las expresiones, consulta Expresiones.

onError

opcional. Si $dateFromString encuentra un error al analizar el/la dateString proporcionado(a), muestra el valor del resultado de la onError proporcionada expresión. Este valor de resultado puede ser de cualquier tipo.

Si no se especifica onError, $dateFromString arroja un error si no puede analizar dateString.

onNull

opcional. Si el dateString proporcionado a $dateFromString es null o falta, se obtiene el valor de resultado de la expresión onNull proporcionada. Este valor de resultado puede ser de cualquier tipo.

Si no especifica onNull y dateString es null o falta, entonces $dateFromString emite null.

Ejemplo
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")

Los siguientes especificadores de formato están disponibles para usarse en <formatString>:

Especificadores
Descripción
Possible Values

%b

Mes abreviado (3 letras)

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

%B

Nombre completo del mes

january-december

%d

Día del mes (2 dígitos, con ceros a la izquierda)

01-31

%G

Año en formato ISO 8601

0000-9999

%H

Hora (2 dígitos, con ceros a la izquierda, reloj de 24 horas)

00-23

%j

Día del año (3 dígitos, con ceros a la izquierda)

001-366

%L

Milisegundo (3 dígitos, con ceros a la izquierda)

000-999

%m

Mes (2 dígitos, con ceros a la izquierda)

01-12

%M

Minuto (2 dígitos, con ceros a la izquierda)

00-59

%S

Segundo (2 dígitos, con ceros a la izquierda)

00-60

%u

Número del día de la semana en formato ISO 8601 (1-lunes, 7-domingo)

1-7

%U

Semana del año (2 dígitos, con ceros a la izquierda)

00-53

%V

Semana del año en formato ISO 8601

1-53

%w

Día de la semana como número entero (0-Domingo, 6-Sábado)

0-6

%Y

Año (4 dígitos, con ceros a la izquierda)

0000-9999

%z

El desfase horario desde UTC.

+/-[hh][mm]

%Z

Los minutos desplazados respecto de UTC como un número. Por ejemplo, si la diferencia de zona horaria (+/-[hhmm]) era +0445, la diferencia en minutos sería +285.

+/-mmm

%%

Carácter porcentual como literal

%

Considera una colección logmessages que contiene los siguientes documentos con fechas.

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

La siguiente agregación utiliza $dateFromString para convertir el valor date en un objeto de fecha:

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

La agregación anterior devuelve los siguientes documentos y convierte cada campo date a la Zona Horaria del Este:

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

El argumento timezone también puede proporcionarse a través de un campo de documento en lugar de un argumento codificado rígidamente. Por ejemplo:

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

La agregación anterior devuelve los siguientes documentos y convierte cada campo date a sus respectivas representaciones 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") }

Si tu colección contiene documentos con cadenas de fecha que no se pueden analizar, $dateFromString lanza un error a menos que proporciones una expresión de agregación al parámetro opcional onError.

Por ejemplo, dada una colección dates con los siguientes 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" }

Puedes usar el parámetro onError para devolver la fecha no válida en su forma original de string:

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

Esto devuelve los siguientes documentos:

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

Si su colección contiene documentos con null cadenas de fecha, $dateFromString devuelve null a menos que proporcione una expresión de agregación al parámetro opcional onNull.

Por ejemplo, dada una colección dates con los siguientes documentos:

{ "_id" : 1, "date" : "2017-02-08T12:10:40.787", timezone: "America/New_York" },
{ "_id" : 2, "date" : null, timezone: "America/New_York" }

Puedes usar el parámetro onNull para que $dateFromString devuelva una fecha que represente la Unix epoch en lugar de null:

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

Esto devuelve los siguientes documentos:

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