cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Highlighted
WDRC
Level: Powered On

Leap Years

All

 

Any idea how I automate adding say 365 days to a date or 366 in a leap year.  The issue in mind is that an insurance certifcate runs out at the end of the month.  So during a process I always want to be able to add the correct amount of days for the different condtions.  So thus the certicate expiry should allways be the end of the month not say a day early in case of a leap year.  It then needs to write the correct date to the SP list.  I only ask this as 2020 will be such a year.

 

Regards,

 

Andrew

1 ACCEPTED SOLUTION

Accepted Solutions
Community Support Team
Community Support Team

Re: Leap Years

Hi @WDRC,

 

Generally, if (year is not divisible by 4) then (it is a common year)

else if (year is not divisible by 100) then (it is a leap year)

else if (year is not divisible by 400) then (it is a common year)

else (it is a leap year)

 

About your scenario, it seems that you would like to add 365 days to a date if it is a common year, while 366 days to a date if it is a leap year.

I have made the following flow for your reference.

For testing, it is triggered by a Manual button. Add a Date input for the trigger.

Add Compose action to get the year of a date:

formatDateTime(triggerBody()['date'],'yyyy')

 Add Compose 2 action to convert the returned year from Compose to a number:

float(outputs('Compose'))

Add Compose 3 action to determine whether the year is a leap year or not. If yes, return 366, if not, return 365:

if(or(equals(mod(outputs('Compose_2'),400),0),and(equals(mod(float(outputs('Compose')),4),0),not(equals(mod(outputs('Compose_2'),100),0)))),'366','365')

Hope it could be your reference.

 1.PNG2.PNG

 

Best regards,

Mabel

Community Support Team _ Mabel Mao
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
5 REPLIES 5
Community Support Team
Community Support Team

Re: Leap Years

Hi @WDRC,

 

Generally, if (year is not divisible by 4) then (it is a common year)

else if (year is not divisible by 100) then (it is a leap year)

else if (year is not divisible by 400) then (it is a common year)

else (it is a leap year)

 

About your scenario, it seems that you would like to add 365 days to a date if it is a common year, while 366 days to a date if it is a leap year.

I have made the following flow for your reference.

For testing, it is triggered by a Manual button. Add a Date input for the trigger.

Add Compose action to get the year of a date:

formatDateTime(triggerBody()['date'],'yyyy')

 Add Compose 2 action to convert the returned year from Compose to a number:

float(outputs('Compose'))

Add Compose 3 action to determine whether the year is a leap year or not. If yes, return 366, if not, return 365:

if(or(equals(mod(outputs('Compose_2'),400),0),and(equals(mod(float(outputs('Compose')),4),0),not(equals(mod(outputs('Compose_2'),100),0)))),'366','365')

Hope it could be your reference.

 1.PNG2.PNG

 

Best regards,

Mabel

Community Support Team _ Mabel Mao
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
WDRC
Level: Powered On

Re: Leap Years

@v-yamao-msft,

 

Thanks, will give that a go tomorrow and let you know if I have any issues.

 

Regards,

 

Andrew

WDRC
Level: Powered On

Re: Leap Years

@v-yamao-msft,

 

I have now been able to put this into flow and have the following:

 

Leep Year.png

So thank you, it proves that all the compose actions works even with my renaming. Now to get the rest of my flow woking.

 

Regards

 

Andrew

Community Support Team
Community Support Team

Re: Leap Years

Hi @WDRC,

 

Thanks for updating.

If it works for you, please mark is as Answer.

 

Best regards,

Mabel

Community Support Team _ Mabel Mao
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
WDRC
Level: Powered On

Re: Leap Years

Mabel @v-yamao-msft & Barry @v-bacao-msft,

 

Thank you for your collective help on the above over several posts to this forum.

 

Let’s reaffirm what we need to with an actual example for one supplier as below:

 

Existing Expiry

Days to Add

New Expiry

   

31/03/2017

365

31/03/2018

31/03/2018

365

31/03/2019

31/03/2019

366

31/03/2020

31/03/2020

365

31/03/2021

 

There are two ways I have been trying to achieve this without much success.

 

USING FLOW

I know the compose functions above are working well and I generally understand what they are doing.  The issue comes with trying to use them in the rest of the flow to set the new expiry when the company send in their new certificate in.  The easiest thing would be to get the company to rename their certificate and then use part of the file name (date) and then write that to the list.  I cannot rely on them renaming the file in this specific way as this will be too complicated to explain in an email and to tell them why I am needing this. 

 

So, the best way is to accept what we are given and work with that.  So, with flow1 we send out request for new certificate and they reply with the new one attached.  This is the trigger for flow2 (this flow).  We then check them against the SP list (got this working  and to ensure we write the data against the correct line item).  This is where I believe I need to be using the existing expiry date and undertaking a test by adding 12 months to it.  But this where the complexity starts and using the various compose functions to undertake this test defeats me. 

 

USING SP LIST CALCULATION

The other option is to look at the existing expiry column in the SP list and then have another column called new expiry.  The new expiry shall be a calculated column and shall add the correct amount of days to achieve the same results of the above.  The issue is I need to have a calculation like the below expression to achieve this that works in a SP column:

 

if(or(equals(mod(outputs('Convert_Year_to_Number'),400),0),and(equals(mod(float(outputs('Get_the_Year_of_a_Date')),4),0),not(equals(mod(outputs('Convert_Year_to_Number'),100),0)))),'366','365')

We may need to achieve this via multiple columns and I am happy to do this if required.

 

So which way do I go the flow route to add the correct amount of days or the SP list way.  Whichever way I do go.  The main aim is to ensure the correct amount of days are added to the existing expiry.

 

Perhaps I am not thinking about this as logically as I should, and I may need to combine both methods to get one result.  Or I need to be thinking about a completly different way which is far simpler.

 

I am going to keep the "date testing" open and make all future comments on this matter against the “leap years” post.  When all is sorted and running I shall mark the “date testing” as solved.  I am sorry for the cross posting.

 

Regards,

 

Andrew

Helpful resources

Announcements
firstImage

Microsoft Flow Online Conference

Join us for a FULL day of FREE Microsoft Flow Sessions from some of the best minds in the industry!

firstImage

Watch Sessions On Demand!

Continue your learning in our online communities.

Power Platform 2019 Release Wave 2 Plan

Power Platform 2019 Release Wave 2 Plan

Features releasing from October 2019 through March 2020

thirdimage

Flow Community User Group Member Badge

Fill out a quick form to claim your user group badge now!

thirdImage

New Flow Community Board!

Check out the new Microsoft Flow Community Blog Topic Suggestion board!

fifthimage

Microsoft Learn

Learn how to build the business apps that you need

sixthImage

Power Platform World Tour

Find out where you can attend!

seventhimage

Webinars & Video Gallery

Watch & learn from the Flow Community Video Gallery!

Top Kudoed Authors
Users Online
Currently online: 49 members 3,974 guests
Recent signins:
Please welcome our newest community members: