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> } } La función
$dateFromStringtoma un documento con los siguientes campos:CampoDescripcióndateStringLa 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
timezoneopción al operador, no incluir información de zona horaria en eldateString.formatOpcional. Especificación del formato de fecha de
dateString.formatpuede ser cualquier expresión que se evalúe como una cadena literal, que contenga 0 o más especificadores de formato. Para ver la lista de especificadores disponibles, consulte Especificadores de formato.Si no seespecifica,
$dateFromStringutiliza"%Y-%m-%dT%H:%M:%S.%LZ"como formato predeterminado, pero acepta una variedad de formatos e intenta analizardateStringsi es posible.timezoneopcional. La zona horaria que se utilizará para formatear la fecha.
Si el argumento
dateStringestá formato como '2017-02-08T12:10:40.787Z', donde la 'Z' al final indica la hora Zulu (zona horaria UTC), no puedes 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.
onErrorOptional. If
$dateFromStringencounters an error while parsing the givendateString, it outputs the result value of the providedonErrorexpression. This result value can be of any type.Si no especifica
onError,$dateFromStringgenera un error si no puede analizardateString.onNullOpcional. Si el valor
dateStringproporcionado a$dateFromStringesnullo no está presente, se mostrará el valor resultante de la expresiónonNullproporcionada. Este valor resultante puede ser de cualquier tipo.Si no especifica
onNullydateStringesnullo falta, entonces$dateFromStringgeneranull.
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 su colección contiene documentos con cadenas de fecha que no se pueden analizar, $dateFromString genera un error a menos que proporcione 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 cadenas de fecha null, $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 época Unix en lugar denull:
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") }