Definición
$dateFromStringConvierte una string de fecha/hora en un objeto de fecha.
La
$dateFromStringLa expresión tiene la siguiente sintaxis:{ $dateFromString: { dateString: <dateStringExpression>, format: <formatStringExpression>, timezone: <tzExpression>, onError: <onErrorExpression>, onNull: <onNullExpression> } } El
$dateFromStringprocesa un documento con los siguientes campos:CampoDescripcióndateStringLa 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
timezoneopción al operador, no incluir información de zona horaria en eldateString.formatopcional. La especificación del formato de fecha del
dateString. Elformatpuede 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,
$dateFromStringusa"%Y-%m-%dT%H:%M:%S.%LZ"como el formato por defecto, pero acepta una variedad de formatos e intenta analizar eldateStringsi es posible.timezoneopcional. La zona horaria que se utilizará para formatear la fecha.
Si el argumento
dateStringtiene 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 argumentotimezone.<timezone>permite las siguientes opciones y expresiones que se evalúan como ellas:un identificador de zona horaria de Olson, como
"Europe/London"o"America/New_York", oun 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.
onErroropcional. Si
$dateFromStringencuentra un error al analizar el/ladateStringproporcionado(a), muestra el valor del resultado de laonErrorproporcionada expresión. Este valor de resultado puede ser de cualquier tipo.Si no se especifica
onError,$dateFromStringarroja un error si no puede analizardateString.onNullopcional. Si el
dateStringproporcionado a$dateFromStringesnullo falta, se obtiene el valor de resultado de la expresiónonNullproporcionada. Este valor de resultado puede ser de cualquier tipo.Si no especificas
onNullydateStringesnullo está ausente, entonces$dateFromStringemitenull.
Comportamiento
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
|
| ||||
|
| ||||
|
| ||||
|
| ||||
|
| ||||
|
| ||||
|
|
Especificadores de formato
Los siguientes especificadores de formato están disponibles para usarse en <formatString>:
Especificadores | Descripción | Possible Values |
|---|---|---|
| Mes abreviado (3 letras) |
|
| Nombre completo del mes |
|
| Día del mes (2 dígitos, con ceros a la izquierda) |
|
| Año en formato ISO 8601 |
|
| Hora (2 dígitos, con ceros a la izquierda, reloj de 24 horas) |
|
| Día del año (3 dígitos, con ceros a la izquierda) |
|
| Milisegundo (3 dígitos, con ceros a la izquierda) |
|
| Mes (2 dígitos, con ceros a la izquierda) |
|
| Minuto (2 dígitos, con ceros a la izquierda) |
|
| Segundo (2 dígitos, con ceros a la izquierda) |
|
| Número del día de la semana en formato ISO 8601 (1-lunes, 7-domingo) |
|
| Semana del año (2 dígitos, con ceros a la izquierda) |
|
| Semana del año en formato ISO 8601 |
|
| Día de la semana como número entero (0-domingo, 6-sábado) |
|
| Año (4 dígitos, con ceros a la izquierda) |
|
| El desfase horario desde UTC. |
|
| Los minutos desplazados respecto de UTC como un número. Por ejemplo, si la diferencia de zona horaria ( |
|
| Carácter porcentual como literal |
|
Ejemplos
Conversión de fechas
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") }
onError
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" }
onNull
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") }