# Add days or business days to a date in Power Automate

> For the full documentation index, see https://250highstreet.com/llms.txt

> Add calendar days with addDays in Power Automate, then skip weekends and holidays with a small loop to get a due date in business days.

Short answer: to add calendar days, use the addDays function. To add business days, no single addDays option skips weekends, so build a small loop: step forward one day at a time, and count a day only when it is not a Saturday, a Sunday or a holiday on your list. The flow below does that with a few standard actions.

## Pick the right goal first

"Add 5 days" can mean two different things:

- Calendar days. Monday plus 5 is Saturday. Weekends count.
- Business days. Monday plus 5 is next Monday. Weekends do not count, and holidays do not count if you tell the flow about them.

Calendar days need one expression. Business days need a loop. Decide which one your team means before you build, because a due date that lands on a Saturday gets missed.

## Part 1. Add calendar days with addDays

Microsoft describes addDays like this: "Add days to a timestamp." The shape is:

addDays('\<timestamp\>', \<days\>, '\<format\>'?)

Microsoft lists the days value as "The positive or negative number of days to add". Microsoft gives two examples. This one adds 10 days: addDays('2018-03-15T00:00:00Z', 10) and "returns this result: "2018-03-25T00:00:00.0000000Z"". This one subtracts five days: addDays('2018-03-15T00:00:00Z', -5) and returns "2018-03-10T00:00:00.0000000Z".

The same page says the function list "applies to both Azure Logic Apps and Power Automate", and "these functions work for both flows in Power Automate and workflows in Azure Logic Apps." The page lives in the Logic Apps documentation, but it names Power Automate too.

Microsoft also lists utcNow as a function: "Return the current timestamp as a string." So a due date 7 days from now is:

addDays(utcNow(), 7)

Microsoft's own page on conditions uses the same pair: less(item()?\['DueDate'\], addDays(utcNow(),1)).

To use the expression:

1.  Open [https://make.powerautomate.com](https://make.powerautomate.com) and open your flow for editing.
2.  In the action where you want the new date (for example, Update item), select the date field.
3.  Choose the Expression tab. Exact names may differ in your version.
4.  Type the expression, for example addDays(utcNow(), 7), and select Add.
5.  Save and run a test with a real item. Open the run and look at the value the action received.

## Mind the time zone

utcNow gives a UTC time. A flow that runs at 9 PM in New York can see tomorrow's date in UTC. Microsoft lists a function for this: convertTimeZone, described as "Convert a timestamp from the source time zone to the target time zone." Our advice, not a Microsoft rule: if your team enters dates only, use a Date only column in the list and test items created late in the evening, so you see which day the flow writes.

## Part 2. Add business days with a loop

Our advice, not a Microsoft rule: here is one way to start. The loop adds one day, checks whether that day counts, and repeats until it has counted enough days.

Microsoft describes the Until loop as "Repeat one or more actions until a condition is met or a specific state changes." That page is a Logic Apps page. It also says: "Your workflow first runs all the actions in the loop, and then checks the condition or state. If the condition is met, the loop stops." In Power Automate the same loop is the Do until action. Exact names may differ.

## Set up the list

Your list needs these columns. The Title column is required by default in SharePoint. Rename it to something that fits, such as "Request", or turn off Require for it. If you do not, the flow's Update item step can fail on a blank title.

- Title (renamed to "Request")
- Request date (Date only)
- Business days (Number, for example 5)
- Due date (Date only, filled by the flow)

Use fake data while you test. Use names like "Request 101" in the Title column.

## Build the flow

1.  Open [https://make.powerautomate.com](https://make.powerautomate.com) and create an automated cloud flow.
2.  Use the SharePoint trigger "When an item is created" and pick your site and list. Our advice, not a Microsoft rule: use "created" and not "created or modified", because this flow writes back to the same item. If you ever switch to "created or modified", add a guard condition first and read "[Power Automate flow keeps running itself over and over](/guides/power-automate-flow-triggers-itself-infinite-loop/)".
3.  Add Initialize variable. Name it workDate, type String, value: the Request date from the trigger.
4.  Add Initialize variable. Name it counted, type Integer, value 0.
5.  Add a Do until action. Set the stop test to: counted is equal to the Business days value from the trigger.
6.  Inside the loop, add Set variable. Choose workDate and set the value to: addDays(variables('workDate'), 1)
7.  Inside the loop, add a Condition with this expression:

and(not(equals(dayOfWeek(variables('workDate')), 0)), not(equals(dayOfWeek(variables('workDate')), 6)))

1.  On the Yes branch, add Increment variable. Choose counted and set the value to 1.
2.  After the loop, add Update item. Set Due date to the workDate variable. Fill the Title field too, using the Title from the trigger, since Title is required.
3.  Save and test.

Why those numbers: Microsoft says dayOfWeek returns "The day of the week from the specified timestamp where Sunday is 0, Monday is 1, and so on". So Saturday is 6 and Sunday is 0. Microsoft's conditions page shows and, not and equals as expressions you can use in a Condition, and the Logic Apps loops page shows a stop test written as equals(variables('Limit'), 10), so the variables() form is Microsoft's own.

Worked example: Request date is Thursday and Business days is 3. The loop moves to Friday (counted 1), Saturday (skipped), Sunday (skipped), Monday (counted 2), Tuesday (counted 3). Due date is Tuesday.

## Count the loop limit

A Do until loop stops after a set number of rounds. The Power Automate limits page lists "Until iterations" with "Default: 60" and "Maximum: 5,000". A business-day count of 5 needs at least 5 rounds, more when weekends are crossed. If you add 40 business days, you need about 56 rounds, which is close to the default of 60. Open the Do until action, find its limits (Count and Timeout), and raise Count if your largest number could pass it. Microsoft's loops page says the loop also stops when the Timeout is reached. Our advice, not a Microsoft rule: set Count to at least double your largest Business days value.

## Part 3. Skip holidays

The weekend test does not know about holidays. One way to start:

1.  Make a second SharePoint list named Holidays. Keep the Title column (rename it to "Holiday name", or turn off Require) and add a Date only column named Holiday date.
2.  Add a Get items action for the Holidays list before the loop. Set Top Count to a number above the rows in your list (up to 5,000). The Get items default is 100. Turn Pagination on in the action settings if your holiday list could pass the Top Count, and see "[Power Automate Get items stops at 100 rows: how to get them all](/guides/power-automate-get-items-only-returns-100/)".
3.  Add a Select action. From is the value of Get items. Map is formatDateTime(item()?\['HolidayDate'\], 'yyyy-MM-dd'). The name inside the brackets is the column's internal name, which can differ from what you see. Check it in a test run.
4.  Add the Select output to the Condition inside the loop, as one more test joined by and: not(contains(body('Select'), formatDateTime(variables('workDate'), 'yyyy-MM-dd'))).

Microsoft's formatDateTime page text says: "Return a timestamp in the specified format." Its example formatDateTime('03/15/2018 12:00:00', 'yyyy-MM-ddTHH:mm:ss') returns '2018-03-15T12:00:00'. Microsoft's conditions page shows contains inside not(): not(contains('200 Success','Fail')). Our advice, not a Microsoft rule: run a test with a date you know is on the Holidays list and open the run to confirm the loop skipped it, because contains on a list of dates behaves differently from contains on text.

Update the Holidays list each year. A flow does not know a holiday unless it is on the list.

## What to avoid

- Do not use a calculated column for this. SharePoint blocks today's date in a calculated column. For the reason, see "[Use today's date in a SharePoint calculated column](/guides/sharepoint-calculated-column-today/)".
- Do not add 7 days when you mean one week of business days. That is 5 business days.
- Do not forget the time zone. A date written late in the evening can land one day off.
- Do not let the loop run without a limit. Set Count and Timeout.
- Do not test with real client records. Test with fake rows first.

## Show the date to the team

Once the flow fills Due date, build a view of items due soon. For a reminder before the date, see "[Send a reminder before a due date in a SharePoint list](/guides/send-reminder-before-due-date/)". A view that uses \[Today\] or \[Me\], or one that uses a blank or "is not equal to" filter, is set in the classic view editor (Edit current view, then Filters). Microsoft's rule covers \[Today\] and \[Me\]. Our advice, not a Microsoft rule: set blank and "is not equal to" filters in the classic view editor too.

## When to get help

You can build all of this yourself in Microsoft 365. If you would rather have it built and tested for your team, I do that. A tracker like this is a fixed price: \$5,000 for one, built in 2 weeks. See "[What a SharePoint tracker costs to build](/guides/what-a-sharepoint-tracker-costs/)". Bring one example of the problem to a free call.

I am Al Davies. I run 250 High Street LLC and build SharePoint trackers and Power Automate flows for operations teams. I work remotely. The first call is free, and I will not try to sell you anything.

See trackers I built: [Tools I built](/portfolio/)

## FAQ

### What is the difference between addDays and addToTime?

Microsoft describes addDays as "Add days to a timestamp." and addToTime as "Add the specified time units to a timestamp." addToTime lets you pick a unit such as Day, Week or Month. For plain days, addDays is shorter.

### Can I subtract days?

Yes. Microsoft says the days value can be negative: "The positive or negative number of days to add". addDays(utcNow(), -5) gives a date five days back.

### Does addDays skip weekends?

Microsoft's addDays text describes adding days to a timestamp, with no weekend rule. For business days, use the loop in this guide.

### Why is my result one day off?

utcNow returns a UTC time, so the date can differ from your local date late in the day. Convert the time zone with convertTimeZone, or use a Date only column and test items made in the evening.

### Do I need a paid plan for this?

Check with your admin which actions your plan includes.

## Sources

- [Microsoft Learn, Reference guide to workflow expression functions in Azure Logic Apps and Power Automate](https://learn.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference)
- [Microsoft Learn, Use expressions in conditions in Power Automate](https://learn.microsoft.com/en-us/power-automate/use-expressions-in-conditions)
- [Microsoft Learn, Run loops to repeat actions in workflows (Azure Logic Apps)](https://learn.microsoft.com/en-us/azure/logic-apps/logic-apps-control-flow-loops)
- [Microsoft Learn, Limits of automated, scheduled, and instant flows](https://learn.microsoft.com/en-us/power-automate/limits-and-config)

## Related guides

- [Power Automate run history only shows 28 days: how to keep a longer record](/guides/power-automate-run-history-28-days/)
- [Power Automate Delay until stops after 30 days: how to wait longer](/guides/power-automate-delay-until-more-than-30-days/)
- [Remind an approver who has not answered after two days](/guides/power-automate-approval-reminder-after-2-days/)

Source: https://250highstreet.com/guides/power-automate-add-business-days-to-date/
