Power Apps Date Formatting

The Text() format tokens every Canvas developer forgets, plus the recipes you actually reach for.

Last verified July 2026 against current Power Fx.

Date formatting in Power Apps is the Text() function plus a format string built from tokens. Get the tokens right and you can render any date or time exactly how you want, get the locale prefix wrong and your app breaks for users in another region.

The basic shape
Text(Today(), "[$-en-US]mmmm d, yyyy") // → "July 29, 2026"

The full format-token table

Mix and match these in the format string. Literal characters (commas, slashes, spaces) pass through as-is.

TokenMeaningExample
yyyy4-digit year2026
yy2-digit year26
mmmmFull month nameJuly
mmmShort month nameJul
mm2-digit month07
mMonth, no leading zero7
ddddFull weekdayWednesday
dddShort weekdayWed
dd2-digit day29
dDay, no leading zero9
hh2-digit hour09
hHour, no leading zero9
mm (after h)2-digit minutes05
ss2-digit seconds07
AM/PM12-hour meridiemPM
[$-en-US]Locale prefix (portability)n/a
mm is context-sensitive. After a year or day it means month; after an hour token (h/hh) it means minutes. Keep minutes next to the hour: "hh:mm AM/PM".

Why you should prefix with [$-en-US]

A custom format string without a language tag is interpreted in the user's locale at runtime. That means the same app can render differently, or throw "The language is not supported", for a user in another region. Prefixing with [$-en-US] pins the interpretation so your tokens always mean what you wrote:

Portable vs fragile
Text(Now(), "[$-en-US]dddd, mmmm d 'at' h:mm AM/PM") // same everywhereText(Now(), "dddd, mmmm d") // depends on user locale

For the built-in DateTimeFormat enum values (e.g. Text(d, DateTimeFormat.LongDate)) you don't need the prefix, those already respect locale on purpose. Use the prefix for custom token strings.

Recipes

Relative time (min / hr ago)
If( DateDiff(dt, Now(), TimeUnit.Minutes) < 60, Text(DateDiff(dt, Now(), TimeUnit.Minutes)) & " min ago", Text(DateDiff(dt, Now(), TimeUnit.Hours)) & " hr ago")
First and last day of the month
// First dayDate(Year(Today()), Month(Today()), 1) // Last day - either worksEOMonth(Today(), 0)DateAdd(Date(Year(Today()), Month(Today()) + 1, 1), -1, TimeUnit.Days)
Add / subtract time
DateAdd(Today(), 7, TimeUnit.Days) // a week outDateAdd(Now(), -3, TimeUnit.Months) // three months agoDateDiff(startDate, endDate, TimeUnit.Days) // span in days
Parse text into a real date
DateValue("2026-07-29") // date onlyDateTimeValue("2026-07-29 14:30") // date + time// Pass a language tag if the text is locale-specific:DateValue("29/07/2026", "en-GB")

Timezone gotchas

Now() and Today() are local to the user's device. Values stored in SharePoint/Dataverse are typically UTC. When a saved time looks "off by a few hours," you're seeing UTC-vs-local. Convert explicitly with TimeZoneOffset():

UTC ↔ local
// Stored UTC → show localDateAdd(utcValue, -TimeZoneOffset(utcValue), TimeUnit.Minutes) // Local → UTC for storageDateAdd(localValue, TimeZoneOffset(localValue), TimeUnit.Minutes)
Comparing a date-only picker to a stored datetime? Strip the time first with DateValue(Text(stored)) or compare against a range, or a 23:00 UTC value can land on the "wrong" day for the user.

FAQ

How do I format a date in Power Apps?

Wrap it in Text() with a format string, e.g. Text(Today(), "mmmm d, yyyy") returns "July 29, 2026". The format string is built from tokens: yyyy for year, mmmm for full month name, dd for two-digit day, and so on.

What does [$-en-US] mean in a Power Apps date format?

It is a language tag that forces the format string to be interpreted in a fixed locale (US English) rather than the user's language. Without it, a published app can throw 'the language is not supported' or interpret month/day tokens differently for users in other regions. Prefix custom format strings with [$-en-US] to make them portable.

Why is mm sometimes month and sometimes minutes?

Power Fx disambiguates by position. mm after a year or day token means month; mm after an hour token (h or hh) means minutes. If you need minutes standalone, keep it next to the hour: "hh:mm".

How do I get the first or last day of the month?

First day: Date(Year(Today()), Month(Today()), 1). Last day: EOMonth(Today(), 0), or DateAdd(Date(Year(Today()), Month(Today()) + 1, 1), -1, TimeUnit.Days).