Power Apps EDate and EOMonth: How to Handle Recurring and End-of-Month Dates
- Shane Young

- Jul 7
- 6 min read
TL;DR: This post shows you how to use the EDate and EOMonth functions in Power Apps to work with recurring dates and end-of-month dates. You will learn how EDATE keeps the same day each month (and correctly rolls January 30 down to February 28), how EOMONTH gives you the last day of any month, and how Sequence and AddColumns let you list out a run of dates without guessing how many days are in each month.
If you have ever tried to schedule something that repeats on the 30th or the 31st, you already know where this goes sideways. A subscription starts on January 30, and the next payment is supposed to land a month later. But February does not have a 30th. So what date do you use, and how do you get Power Apps to figure it out for you without a pile of if-statements?
Two functions handle this cleanly: EDate and EOMonth. They work just like their Excel counterparts, and they take almost all of the date math off your plate. In this post you will see what each one does, when to reach for it, and a couple of supporting tricks (Sequence and AddColumns) that make them easy to test.
If you would rather watch the full walkthrough, check out the video here: Power Apps Date Functions: EDate and EOMonth
What problem do EDate and EOMonth solve in Power Apps?
Both functions handle month math without forcing you to count days. The old approach was to take a date and add a number of days to it with DateAdd. That works fine until you hit the end of the month, because months do not all have the same number of days. Is it 28? 30? 31? You end up writing logic just to answer that question, and it is easy to get wrong.
EDate answers “what is this same day, N months from now?” and it is smart about short months. EOMonth answers “what is the last day of the month, N months from now?” You give each one a starting date and a number of months, and it does the rest.
What is the Sequence function in Power Apps?
Sequence gives you a table of numbers, which is exactly what you need when you want to list out a series of dates. The first argument is how many numbers you want, and the optional second argument is where to start counting.
Sequence(12) // a table with a Value column: 1, 2, 3 ... 12Sequence(12, 0) // starts at 0 instead: 0, 1, 2 ... 11Starting at 0 is handy when you want the first row to be “this month” (add zero months) and each row after that to step forward one month. The column that Sequence produces is named Value, and you will reference it in the next step.

How do you build a list of dates with AddColumns?
AddColumns is a data-shaping function that adds a new column to a table. You wrap it around your Sequence table and use it to calculate a date for each number. Point a gallery at that table, and you get one row per month.
AddColumns( Sequence(12, 0), MyDate, EOMonth(Today(), Value) )Then in the gallery, the label simply shows ThisItem.MyDate. Because Value walks from 0 up to 11, you get this month plus the eleven months that follow.

How do you get the last day of the month with EOMonth?
EOMonth always returns the last day of the month, no matter how many days that month has. You give it a date to read the month from, and a number of months to move. Zero means the current month.
EOMonth( Today(), 0 ) Starting from July, that gives you July 31, then August 31, September 30, October 31, and so on. Run it far enough forward to hit February and it returns February 28, because it already knows February is short. That is the whole point: you never have to tell it how many days a month has.
How do you keep the same date every month with EDate?
EDate returns the same day of the month, N months out, and gracefully handles days that do not exist in shorter months. This is the one you want for recurring schedules that are anchored to a specific day.
AddColumns( Sequence(12, 0), MyDate, EDate(Date(2026,1,30), Value) )Start on January 30, 2026 and step forward, and you get January 30, then February 28 (because there is no February 30), then March 30, April 30, and so on. The value you pass is just the number of months to add, and it can even be negative if you want to look at previous months.
This is the pattern for subscription deliveries, contract renewals, and payment dates that got set to an awkward day like the 29th, 30th, or 31st. EDate keeps them on the right day every month and quietly fixes the months where that day does not exist.

Should you use Date or DateValue in Power Apps?
Use Date when you have the year, month, and day as numbers. Use DateValue when you have the date as text. Both return a real date object; they just take different inputs.
Date(2026, 1, 30) // three numbers: year, month, day
DateValue("1/30/2026") // a text string that reads as a date
If your date is coming in as a string, which happens a lot, DateValue is the natural fit. If you are hand-building a date from numeric values, Date is cleaner. Mixing these up is a common source of “why is this formula not working” moments, so it is worth knowing which one your input calls for.
Why not just use DateAdd for this?
DateAdd is great for adding a fixed number of days, but it is the wrong tool for month-end math. You can force it to work, for example DateAdd(Date(2026,1,31), 1, Months) will hand you February 28, but the moment you try to add days instead of months you are back to guessing whether the month has 28, 30, or 31 days. EDATE and EOMONTH remove the guessing entirely, which is why they are the cleaner choice.
Frequently asked questions
What does EDate do in Power Apps?
EDate returns the same day of the month a set number of months before or after a start date. If that exact day does not exist in the target month, it moves to the last valid day, so January 30 plus one month becomes February 28.
What does EOMonth do in Power Apps?
EOMonth returns the last day of the month a set number of months from a start date. Pass 0 for the current month, 1 for next month, and so on. It automatically accounts for months with 28, 30, or 31 days.
How do I list the next 12 months of dates in Power Apps?
Use Sequence to generate the numbers 0 through 11, then wrap it in AddColumns and calculate a date for each number with EDATE or EOMONTH. Bind a gallery to that table to display one row per month.
What is the difference between Date and DateValue in Power Apps?
Date takes separate numeric values for year, month, and day, such as Date(2026, 1, 30). DateValue takes a single text string, such as DateValue("1/30/2026"). Use DateValue when your date arrives as text and Date when you have the numbers.
Do EDate and EOMonth work the same as in Excel?
Yes. Both functions behave the same way they do in Excel, including how they handle end-of-month rollover, so if you know the Excel versions you already know these.
How do I handle subscriptions that start on the 31st?
Use EDate anchored to the start date and add the number of months you need. EDATE keeps the recurrence on the 31st for months that have one and rolls it back to the last valid day for months that do not.
Key takeaways
• EDate returns the same day of the month N months out and rolls January 30 down to February 28 when the target day does not exist.
• EOMonth returns the last day of the month N months out and automatically knows whether that month has 28, 30, or 31 days.
• Sequence(12, 0) produces the numbers 0 through 11, a clean way to represent “this month plus the next eleven.”
• AddColumns turns that list of numbers into a list of dates you can bind a gallery to.
• Use Date for numeric year, month, and day values and DateValue when your date comes in as text.
• Reach for EDate and EOMonth instead of adding a raw number of days with DateAdd, which forces you to guess each month’s length.
Need a hand with Dates in Power Apps?
If you want help building recurring schedules, subscription logic, or anything else in the Power Platform, the team at PowerApps911 can help. Reach out to us by clicking the Contact button and let us build something awesome together.



Comments