Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$dateFromString (operador de expresión)

$dateFromString

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

La $dateFromString La expresión 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 cadena de fecha y hora que se convertirá en un objeto de fecha. Ver 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 del dateString. El format puede ser cualquier expresión que evalúe a un literal de string, que contenga 0 o más especificadores de formato. Para una lista de especificadores disponibles, consulta Especificadores de Formato.

Si no se especifica, $dateFromString usa "%Y-%m-%dT%H:%M:%S.%LZ" como el 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 tiene el formato '2017-02-08T12:10:40.787Z', en el que la 'Z' al final indica la hora zulú (zona horaria UTC), no puede especificar el argumento timezone.

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

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 especificas onNull y dateString es null o está ausente, entonces $dateFromString emite null.

Tip

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

Volver

$dateFromParts

En esta página