Power Automate formatDateTime: синтаксис, рядки формату та приклади
By Mirko Peters ·
Як працює formatDateTime у Power Automate: синтаксис, рядки формату, які справді потрібні, часові пояси з convertTimeZone та помилки, через які з'являються неправильні дати й час.
Automatically translated with AI from the original post. Read the English original
Power Automate formatDateTime перетворює дату й час на текст у потрібному вигляді. Синтаксис: formatDateTime(timestamp, format, locale), де формат і локаль необов'язкові, а результат є рядком. Наприклад, formatDateTime(utcNow(), 'dd-MM-yyyy') повертає поточну дату за UTC у форматі день, місяць, рік. Ця стаття для тих, хто створює потоки й постійно отримує такі значення, як 2023-10-22T00:00:00Z, в електронних листах, іменах файлів чи стовпцях SharePoint. Тут розглянуто синтаксис, рядки формату, які вам знадобляться найчастіше, пастку з часовими поясами, таблицю поширених шаблонів і помилки, через які результати виходять неправильними.
Головне
- Синтаксис: formatDateTime(timestamp, format, locale), де формат і локаль необов'язкові, а результат завжди є рядком.
- Без формату функція повертає шаблон round-trip за ISO 8601, наприклад 2018-03-15T00:00:00.0000000.
- Регістр у рядках формату має значення: MM означає місяць, а mm — хвилину; HH — це 24-годинний формат години, а hh — 12-годинний.
- Power Automate за замовчуванням працює з UTC, тож спершу перетворіть часовий пояс за допомогою convertTimeZone або convertFromUtc, а потім форматуйте результат.
- Беріть введені вручну значення та рядки формату в одинарні лапки, але ніколи не беріть динамічний вміст в одинарні лапки.
Як працює formatDateTime
Функція приймає timestamp і перетворює його на потрібний вигляд. У статті Microsoft про форматування значень дати й часу в потоці перший аргумент описано як дату та час, які потрібно відформатувати. Його можна ввести вручну або взяти з динамічного вмісту. Введені вручну значення мають бути у форматі ISO 8601, наприклад 2009-06-15T13:45:30. Другий аргумент — рядок формату. Один символ означає стандартний рядок формату. Більше одного символу — це користувацький рядок формату, який керує позицією та точністю місяця, дня, року, години, секунди тощо.
Варто запам'ятати три деталі з довідки Microsoft щодо виразів у робочих процесах:
- Формат необов'язковий. Якщо його не вказати, використовується шаблон
o, який Microsoft описує як ISO 8601 зі збереженою інформацією про часовий пояс.formatDateTime('03/15/2018')повертає'2018-03-15T00:00:00.0000000'. - Некоректний формат спричиняє помилку. Запуск потоку завершується з помилкою, тож друкарська помилка в шаблоні з'явиться в історії запусків.
- Локаль необов'язкова. Якщо її не вказати, використовується
en-us. Некоректна локаль також спричиняє помилку. Так можна отримати назви місяців і днів іншою мовою:formatDateTime('01/31/2016', 'dddd MMMM d', 'fr-fr')повертає'dimanche janvier 31', тоді як той самий виклик без локалі повертає'Sunday January 31'.
Значення, яке повертає функція, є рядком, і на практиці це важливо. Щойно ви відформатували дату, у вас уже текст, і результат не слід використовувати для обчислень з датами. Спершу виконайте обчислення за допомогою функцій на кшталт addDays або addToTime, а форматування робіть наприкінці. У Power Automate відформатоване значення зазвичай вставляють у текст електронного листа, назву файлу або текстовий стовпець.
Як крок за кроком використовувати formatDateTime у Power Automate
У статті Microsoft наведено зрозумілий спосіб вставити вираз у потік.
- Виберіть поле введення в дії, куди має потрапити відформатоване значення, наприклад Текст (Body) дії Надіслати електронного листа (V2).
- Виберіть Додати динамічний вміст, а потім відкрийте вкладку Вираз. У конструкторі потоків вона відображається як кнопка fx.
- Введіть
formatDateTime(або знайдіть функцію в списку функцій Дата й час. - Додайте значення. Введіть фіксоване значення в одинарних лапках або виберіть динамічний вміст. Не ставте одинарні лапки навколо динамічного вмісту.
- Додайте рядок формату в одинарних лапках, наприклад
'MM/dd/yyyy'. - Виберіть ОК, щоб вставити вираз.
Шаблон зі сторінки Microsoft виглядає так: formatDateTime('2023-10-22', 'dd/MM/yyyy hh:mm tt') для фіксованого значення в лапках. Той самий виклик із динамічним вмістом замість значення в лапках записується без лапок.
У прикладі зі статті використано потік з ручним запуском і вхідним параметром Дата. Вираз має вигляд formatDateTime(triggerBody()?['date'], 'MM/dd/yyyy'). Для дати 2023-10-22 лист показує дату у форматі MM/dd/yyyy.
Щоб перевірити вираз, перш ніж будувати на ньому потік, використайте дію Compose з фіксованою позначкою часу в одинарних лапках, запустіть потік і перегляньте результат в історії запусків. Це займе хвилину і вбереже вас від виправлення неправильного формату в потоці, який уже надсилає справжні листи.
Рядки формату, які ви справді використовуватимете
Стандартні рядки складаються з однієї літери. Приклади Microsoft для позначки часу 2009-06-15T13:45:30:
'g'повертає6/15/2009 1:45 PM, це загальний шаблон дати й часу з коротким часом.'D'повертаєMonday, June 15, 2009, це довгий шаблон дати.
У документації .NET є й інші стандартні літери. Приклади для тієї самої позначки часу: 'd' дає 6/15/2009, 't' дає 1:45 PM, 'T' дає 1:45:30 PM, 's' дає відсортований 2009-06-15T13:45:30, а 'Y' дає June 2009. Більшість із них залежать від правил культури, тож та сама літера може виглядати інакше з іншою локаллю. Однаковими всюди лишаються o, r, s і u.
Власні рядки дають вам контроль. Ось специфікатори, які важливі для потоків:
yyyyце чотиризначний рік, аyyце двозначний рік.MMце місяць з провідним нулем,MMMце скорочена назва місяця, аMMMMце повна назва місяця.Mце місяць без провідного нуля.ddце день з провідним нулем,dddце скорочена назва дня тижня, аddddце повна назва дня тижня.HHце година у 24-годинному форматі з провідним нулем.hhце година у 12-годинному форматі з провідним нулем.mmце хвилини,ssце секунди, аfffце мілісекунди.ttце AM або PM.
Згідно з цією таблицею, formatDateTime('2009-06-15T13:45:30', 'yyyy-MM-dd') дає 2009-06-15, а 'hh:mm tt' дає 01:45 PM. У статті Microsoft про потоки також наведено formatDateTime(utcNow(), 'MMMM dd, yyyy, HH:mm'), яка повертає поточні дату й час UTC у шаблоні June 15, 2009, 16:50, використовуючи фіксовану зразкову дату.
Дві особливості походять від правил .NET. По-перше, один символ завжди сприймається як стандартний рядок формату. Якщо потрібен один власний специфікатор, поставте перед ним знак відсотка, наприклад '%d'. По-друге, щоб вставити фіксований текст у шаблон, екрануйте символ оберненою косою рискою або візьміть текст у лапки. Інші символи, які не є специфікаторами, копіюються у вихідний результат без змін. Скісна риска та двокрапка замінюються роздільниками з локалі, що може здивувати, якщо ви передаєте іншу локаль.
Часові пояси: форматуйте після конвертації
Power Automate використовує UTC за замовчуванням, а utcNow() повертає поточну дату й час у UTC. Якщо ваші користувачі знаходяться в Берліні чи Нью-Йорку, час у вашому листі буде неправильним, доки ви його не конвертуєте.
У статті Microsoft обидві функції поєднано: formatDateTime(convertTimeZone(utcNow(), 'UTC', 'Eastern Standard Time'), 'yyyy-MM-dd HH:mm:ss'). Внутрішня функція змінює часовий пояс, зовнішня форматує результат. Назви часових поясів є назвами Windows, наприклад UTC, Pacific Standard Time та Eastern Standard Time. Для інших регіонів використовуйте відповідну назву часового поясу Windows зі списку Microsoft.
У довідці щодо робочих процесів також описано convertFromUtc, яка приймає мітку часу UTC та цільовий часовий пояс і повертає перетворений час без зсуву UTC. Приклад: convertFromUtc('2018-01-01T08:00:00.0000000Z', 'Pacific Standard Time') повертає "2018-01-01T00:00:00.0000000". Є також convertToUtc, яка працює у зворотному напрямку. А в Power Automate є дія Convert time zone з вхідними даними Base time, Source time zone, Destination time zone та необов’язковим Format string, якщо ви віддаєте перевагу дії, а не виразу.
Якщо вхідні дані не відповідають ISO 8601, очікуйте помилку на кшталт «The date time string must match ISO8601 format.» Типова причина — дата, введена як 15/03/2018. Для дат у локальному форматі в довідці описано parseDateTime із локаллю та форматом, наприклад parseDateTime('21052019', 'fr-fr', 'ddMMyyyy'), яка повертає '2019-05-21T00:00:00.0000000'. Спочатку розбирайте, потім форматуйте.
Типові помилки
- Використання
mmдля місяця. Мала літераmmозначає хвилини, аMM— місяць. Дата, відформатована якdd/mm/yyyy, показує хвилини там, де має бути місяць. - Поєднання
HHзtt. Власний приклад Microsoft'M/dd/yyyy HH:mm:ss tt'дає6/15/2009 13:45:30 PM, що суперечливо. ВикористовуйтеhhзttабоHHбез нього. - Лапки в динамічному вмісті. Динамічний вміст не повинен містити одинарних лапок, інакше потік сприймає ім’я як звичайний текст.
- Забутий часовий пояс. За замовчуванням використовується UTC. Конвертуйте перед форматуванням.
- Математичні дії з результатом. Результат є рядком. Спочатку обчисліть, потім форматуйте.
- Довіра до прикладів результатів для
utcNow(). Дати в документації є фіксованими прикладами. Ваш результат відображає поточний час. - Передача дати не в ISO-форматі. Спочатку розберіть її з локаллю та форматом.
Пов’язані теми для вивчення
- Конвертація часових поясів: стаття Microsoft про конвертацію часових поясів охоплює як дію, так і вираз.
- Додавання та віднімання часу:
addDaysіaddToTimeприймають той самий необов’язковий формат, тож можна змістити і відформатувати за один виклик. - Розбір локальних форматів дат:
parseDateTimeприймає локаль і формат для дат, які не надходять у форматі ISO 8601. - Повний перелік функцій: у довіднику виразів робочих процесів описано кожну функцію для роботи з датою й часом.
- Усі користувацькі специфікатори перелічено на сторінці custom date and time format strings: там описано кожну літеру.
Наступний крок
Щоб результати formatDateTime у Power Automate були надійними, починайте з дати у форматі ISO 8601, перетворюйте часовий пояс перед форматуванням і перевіряйте шаблон в дії Compose. Далі прочитайте статтю Microsoft про те, як налаштувати або відформатувати значення дати й часу в потоці, і складіть короткий список шаблонів, які ваша команда використовує найчастіше.