Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$dateFromString (operador de agregació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 cadena de fecha y hora que se convertirá en un objeto de fecha. Ver Fecha para obtener más información sobre los formatos de fecha/hora.

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

format

Opcional. La especificación del formato de fecha dateString de.format puede ser cualquier expresión que evalúe un literal de cadena y que contenga 0 o más especificadores de formato. Para obtener una lista de los especificadores disponibles, consulte Especificadores de Formato.

Si no se especifica, $dateFromString usa "%Y-%m-%dT%H:%M:%S.%LZ" como formato predeterminado, pero acepta una variedad de formatos e intenta analizar si dateString 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 evalúan a ellas:

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

onError

Opcional. Si encuentra un error al analizar $dateFromString el dateString especificado, genera el valor resultante de la onError expresión proporcionada. Este valor resultante puede ser de cualquier tipo.

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

onNull

Opcional. Si el dateString proporcionado a $dateFromString es null o no está presente, se genera el valor resultante de la onNull expresión proporcionada. Este valor resultante puede ser de cualquier tipo.

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

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

%d

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

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

%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

%V

Semana del año en formato ISO 8601

1-53

%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

%

Considere 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 mediante un campo de documento en lugar de un argumento codificado. 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$dateFromString fecha, devuelve null a menos que proporcione una expresión de agregación al onNull parámetro opcional.

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

Puede utilizar el onNull parámetro para que devuelva una fecha que $dateFromString represente la época de Unix en lugar null de:

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