M365Con 2027 – безкоштовна онлайн-конференція · 11–22 Jan 2027 · 120 sessions→ m365con.net

Блог · Mirko Peters

Power Automate formatDateTime: синтаксис, рядки формату та приклади

By ·

Як працює 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 наведено зрозумілий спосіб вставити вираз у потік.

  1. Виберіть поле введення в дії, куди має потрапити відформатоване значення, наприклад Текст (Body) дії Надіслати електронного листа (V2).
  2. Виберіть Додати динамічний вміст, а потім відкрийте вкладку Вираз. У конструкторі потоків вона відображається як кнопка fx.
  3. Введіть formatDateTime( або знайдіть функцію в списку функцій Дата й час.
  4. Додайте значення. Введіть фіксоване значення в одинарних лапках або виберіть динамічний вміст. Не ставте одинарні лапки навколо динамічного вмісту.
  5. Додайте рядок формату в одинарних лапках, наприклад 'MM/dd/yyyy'.
  6. Виберіть ОК, щоб вставити вираз.

Шаблон зі сторінки 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 про те, як налаштувати або відформатувати значення дати й часу в потоці, і складіть короткий список шаблонів, які ваша команда використовує найчастіше.

Entities in this article

Power Automate

Related articles

RSS