Definición
$dateFromStringConvierte una string de fecha/hora en un objeto de fecha.
La expresión
$dateFromStringtiene 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 Fecha para obtener más información sobre los formatos de fecha/hora.
Si se especifica la opción
timezonepara el operador, no incluya información de zona horaria endateString.formatOpcional. La especificación del formato de fecha
dateStringde.formatpuede 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,
$dateFromStringusa"%Y-%m-%dT%H:%M:%S.%LZ"como formato predeterminado, pero acepta una variedad de formatos e intenta analizar sidateStringes 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 evalúan a ellas:un identificador de zona horaria de Olson, como
"Europe/London""America/New_York"o, 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 encuentra un error al analizar
$dateFromStringeldateStringespecificado, genera el valor resultante de laonErrorexpresión proporcionada. Este valor resultante puede ser de cualquier tipo.Si no
onErrorespecifica, genera un error si no$dateFromStringpuededateStringanalizar.onNullOpcional. Si el
dateStringproporcionado a$dateFromStringesnullo no está presente, se genera el valor resultante de laonNullexpresión proporcionada. Este valor resultante puede ser de cualquier tipo.Si no especifica
onNullydateStringesnullo falta, entonces$dateFromStringnullgenera.
Comportamiento
Ejemplo | Resultados | ||||
|---|---|---|---|---|---|
|
| ||||
|
| ||||
|
| ||||
|
| ||||
|
| ||||
|
|
Especificadores de formato
Los siguientes especificadores de formato están disponibles para usarse en <formatString>:
Especificadores | Descripción | Possible Values |
|---|---|---|
| Día del mes (2 dígitos, rellenado con ceros) |
|
| Año en formato ISO 8601 |
|
| Hora (2 dígitos, con ceros a la izquierda, reloj de 24 horas) |
|
| 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 en formato ISO 8601 |
|
| 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
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") }
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$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") }