Power Automate formatDateTime: sintaxis, cadenas de formato y ejemplos
Por Mirko Peters ·
Qué hace formatDateTime en Power Automate: sintaxis, las cadenas de formato que más importan, zonas horarias con convertTimeZone y los errores que dan lugar a fechas y horas incorrectas.
Traducido automáticamente con IA a partir de la publicación original. Lee el original en inglés
Power Automate formatDateTime convierte una fecha y una hora en el texto que necesitas. La sintaxis es formatDateTime(timestamp, format, locale), donde el formato y la configuración regional son opcionales y el resultado es una cadena. Por ejemplo, formatDateTime(utcNow(), 'dd-MM-yyyy') devuelve la fecha UTC actual como día, mes y año. Este artículo está pensado para quienes crean flujos y acaban obteniendo fechas como 2023-10-22T00:00:00Z en correos, nombres de archivo o columnas de SharePoint. Cubre la sintaxis, las cadenas de formato que más vas a usar, la trampa de las zonas horarias, una tabla de patrones habituales y los errores que causan resultados incorrectos.
Puntos clave
- La sintaxis es formatDateTime(timestamp, format, locale), donde el formato y la configuración regional son opcionales y el resultado es siempre una cadena.
- Sin formato, la función devuelve el patrón de ida y vuelta de ISO 8601, por ejemplo 2018-03-15T00:00:00.0000000.
- Las mayúsculas importan en las cadenas de formato: MM es el mes y mm son los minutos, y HH es la hora de 24 horas mientras que hh es la hora de 12 horas.
- Power Automate trabaja en UTC de forma predeterminada, así que convierte primero la zona horaria con convertTimeZone o convertFromUtc y después da formato al resultado.
- Escribe entre comillas simples los valores escritos a mano y las cadenas de formato, pero nunca pongas el contenido dinámico entre comillas simples.
Cómo funciona formatDateTime
La función toma un timestamp y lo reescribe. El artículo de Microsoft sobre el formato de valores de fecha y hora en un flujo describe el primer argumento como la fecha y hora que quieres formatear. Puede escribirse a mano o proceder del contenido dinámico. Los valores escritos a mano deben estar en formato ISO 8601, como 2009-06-15T13:45:30. El segundo argumento es la cadena de formato. Un solo carácter es una cadena de formato estándar. Más de un carácter es una cadena de formato personalizada, que controla la posición y la precisión del mes, el día, el año, la hora, los segundos, etc.
Hay tres detalles de la referencia de expresiones de flujo de trabajo de Microsoft que conviene recordar:
- El formato es opcional. Si lo omites, el valor predeterminado es el patrón
o, que Microsoft describe como ISO 8601 conservando la información de la zona horaria.formatDateTime('03/15/2018')devuelve'2018-03-15T00:00:00.0000000'. - Un formato no válido provoca un error. La ejecución del flujo falla, así que una errata en el patrón aparecerá en el historial de ejecuciones.
- La configuración regional es opcional. Si la omites, es
en-us. Una configuración regional no válida también es un error. Así es como obtienes nombres de meses y días en otro idioma:formatDateTime('01/31/2016', 'dddd MMMM d', 'fr-fr')devuelve'dimanche janvier 31', mientras que la misma llamada sin configuración regional devuelve'Sunday January 31'.
El valor devuelto es una cadena de texto. Esto importa en la práctica. Una vez que das formato a una fecha, tienes texto, y no deberías usar ese resultado para hacer cálculos con fechas. Haz primero el cálculo con funciones como addDays o addToTime, y aplica el formato al final. En Power Automate, el valor con formato suele ser lo que insertas en el cuerpo de un correo, en el nombre de un archivo o en una columna de texto.
Cómo usar formatDateTime en Power Automate paso a paso
El artículo de Microsoft explica con claridad cómo insertar la expresión en un flujo.
- Selecciona el campo de entrada de la acción donde debe ir el valor con formato, por ejemplo el Cuerpo de una acción Enviar un correo electrónico (V2).
- Selecciona Agregar contenido dinámico y, a continuación, abre la pestaña Expresión. En el diseñador de flujos, esto aparece como el botón fx.
- Escribe
formatDateTime(, o busca la función en la lista de funciones de Fecha y hora. - Agrega el valor. Escribe un valor fijo entre comillas simples o selecciona contenido dinámico. No pongas comillas simples alrededor del contenido dinámico.
- Agrega la cadena de formato entre comillas simples, por ejemplo
'MM/dd/yyyy'. - Selecciona Aceptar para insertar la expresión.
El patrón de la página de Microsoft tiene este aspecto: formatDateTime('2023-10-22', 'dd/MM/yyyy hh:mm tt') para un valor fijo entre comillas, y la misma llamada con un elemento de contenido dinámico en lugar del valor entre comillas, sin comillas.
El ejemplo práctico del artículo usa un flujo iniciado manualmente con una entrada Fecha. La expresión es formatDateTime(triggerBody()?['date'], 'MM/dd/yyyy'). Con una fecha de 2023-10-22, el correo muestra la fecha en el formato MM/dd/yyyy.
Para comprobar una expresión antes de construir sobre ella, usa una acción Redactar con una marca de tiempo fija entre comillas simples, ejecuta el flujo y revisa la salida en el historial de ejecuciones. Solo lleva un minuto y te evita corregir un formato roto en un flujo que ya envía correos reales.
Cadenas de formato que realmente vas a usar
Las cadenas estándar son una sola letra. Estos son los ejemplos de Microsoft para la marca de tiempo 2009-06-15T13:45:30:
'g'devuelve6/15/2009 1:45 PM, el patrón general de fecha y hora con hora corta.'D'devuelveMonday, June 15, 2009, el patrón de fecha larga.
La documentación de .NET enumera más letras estándar. Ejemplos con la misma marca de tiempo: 'd' da 6/15/2009, 't' da 1:45 PM, 'T' da 1:45:30 PM, 's' da el formato ordenable 2009-06-15T13:45:30, y 'Y' da June 2009. La mayoría de estos siguen las reglas de la referencia cultural, así que la misma letra puede verse distinta con otra configuración regional. Los que siempre se ven igual en todas partes son o, r, s y u.
Las cadenas personalizadas te dan control. Estos son los especificadores que importan para los flujos:
yyyyes el año de cuatro dígitos, yyyel año de dos dígitos.MMes el mes con cero inicial,MMMel nombre corto del mes yMMMMel nombre completo del mes.Mes el mes sin cero inicial.ddes el día con cero inicial,dddel nombre corto del día yddddel nombre completo del día.HHes la hora en formato de 24 horas, con cero inicial.hhes la hora en formato de 12 horas, con cero inicial.mmson los minutos,sslos segundos, yffflos milisegundos.ttes AM o PM.
Siguiendo esa tabla, formatDateTime('2009-06-15T13:45:30', 'yyyy-MM-dd') devuelve 2009-06-15, y 'hh:mm tt' devuelve 01:45 PM. El artículo sobre flujos de Microsoft también muestra formatDateTime(utcNow(), 'MMMM dd, yyyy, HH:mm'), que devuelve la fecha y hora UTC actuales en el patrón June 15, 2009, 16:50, usando una fecha de ejemplo fija.
Hay dos peculiaridades que vienen de las reglas de .NET. Primero, una sola letra siempre se interpreta como cadena de formato estándar. Si quieres usar un especificador personalizado de una sola letra, antepón un signo de porcentaje, por ejemplo '%d'. Segundo, para insertar texto fijo en un patrón, escapa el carácter con una barra invertida o pon el texto entre comillas. Los demás caracteres que no son especificadores se copian tal cual en la salida. La barra diagonal y los dos puntos se sustituyen por los separadores de la configuración regional, lo que puede sorprenderte si usas otra configuración regional.
Zonas horarias: da formato después de convertir
Power Automate usa UTC de forma predeterminada, y utcNow() devuelve la fecha y hora actuales en UTC. Si tus usuarios están en Berlín o en Nueva York, la hora que aparezca en tu correo será incorrecta a menos que la conviertas antes.
El artículo de Microsoft combina ambas funciones: formatDateTime(convertTimeZone(utcNow(), 'UTC', 'Eastern Standard Time'), 'yyyy-MM-dd HH:mm:ss'). La función interna cambia la zona horaria y la externa da formato al resultado. Los nombres de las zonas horarias son los nombres de Windows, como UTC, Pacific Standard Time y Eastern Standard Time. Para otras regiones, usa el nombre de zona horaria de Windows correspondiente de la lista de Microsoft.
La referencia de flujos de trabajo también describe convertFromUtc, que recibe una marca de tiempo UTC y una zona horaria de destino, y devuelve la hora convertida sin el desfase respecto a UTC. Su ejemplo: convertFromUtc('2018-01-01T08:00:00.0000000Z', 'Pacific Standard Time') devuelve "2018-01-01T00:00:00.0000000". También existe convertToUtc, que hace el proceso inverso. Y Power Automate tiene una acción Convertir zona horaria con las entradas Hora base, Zona horaria de origen, Zona horaria de destino y una Cadena de formato opcional, si prefieres una acción en lugar de una expresión.
Si la entrada no es ISO 8601 válido, espera un error como "The date time string must match ISO8601 format." Una fecha escrita como 15/03/2018 es una causa típica. Para las fechas que llegan en un formato local, la referencia describe parseDateTime con una configuración regional y un formato, por ejemplo parseDateTime('21052019', 'fr-fr', 'ddMMyyyy'), que devuelve '2019-05-21T00:00:00.0000000'. Analiza primero y da formato después.
Errores comunes
- Usar
mmpara el mes. Lammen minúsculas es el minuto yMMes el mes. Una fecha con formatodd/mm/yyyymuestra los minutos donde debería aparecer el mes. - Combinar
HHcontt. El ejemplo del propio Microsoft'M/dd/yyyy HH:mm:ss tt'produce6/15/2009 13:45:30 PM, lo cual es contradictorio. Usahhcontt, oHHsin él. - Entrecomillar contenido dinámico. El contenido dinámico no debe tener comillas simples, o el flujo trata el nombre como texto normal.
- Olvidar la zona horaria. La predeterminada es UTC. Convierte antes de dar formato.
- Hacer cálculos con el resultado. La salida es una cadena de texto. Calcula primero y da formato al final.
- Confiar en los ejemplos de salida de
utcNow(). Las fechas de la documentación son ejemplos fijos. Tu resultado refleja la hora actual. - Pasar una fecha que no es ISO. Analízala primero con una configuración regional y un formato.
Temas relacionados que conviene explorar
- Convertir zonas horarias: el artículo de Microsoft sobre conversión de zonas horarias cubre tanto la acción como la expresión.
- Sumar o restar tiempo:
addDaysyaddToTimeaceptan el mismo formato opcional, así que puedes desplazar y dar formato en una sola llamada. - Analizar formatos de fecha locales:
parseDateTimeacepta una configuración regional y un formato para fechas que no llegan en ISO 8601. - La lista completa de funciones: la referencia de expresiones de flujos de trabajo documenta todas las funciones de fecha y hora.
- Todos los especificadores personalizados: la página de cadenas de formato de fecha y hora personalizadas enumera cada letra.
Siguiente paso
Para obtener resultados fiables con formatDateTime en Power Automate, empieza con una fecha ISO 8601, convierte la zona horaria antes de dar formato y prueba el patrón en una acción Redactar. Después, lee el artículo de Microsoft sobre cómo personalizar o dar formato a los valores de fecha y hora en un flujo, y guarda una lista breve con los patrones que más usa tu equipo.