# fnOneMonthEarlier ( DateFrom )

Gives the exact date of one month earlier

Average rating: 4.6 (21 votes) Log in to vote

Maria del Rocio Moguel UT MD Anderson Cancer Center http://www.mdanderson.org |

Sample input:

fnOneMonthEarlier(1/31/2015)

Sample output:

12/31/2014

Function definition: (Copy & paste into FileMaker's Edit Custom Function window)

This function takes into account the different lengths of the months (30, 31, 28) so in case the day number of the DateFrom is 31, it will place the correct day number for the previous month. (It does not take into consideration a leap year; it will use Feb 28).

## Comments

eos, Teg Apr 13, 2015 |
||

Try letting FM's calc engine do the hard work, incl, figuring out leapyearness: // Signature: fnOneMonthEarlier_eos ( dateStart ) Let ( [ inputYear = Year ( dateStart ) ; inputDay = Day ( dateStart ) ; inputMonth = Month ( dateStart ) ] ; Case ( Month ( Date ( inputMonth - 1 ; inputDay ; inputYear ) ) = inputMonth ; Date ( inputMonth ; 0 ; inputYear ) ; Date ( inputMonth - 1 ; inputDay ; inputYear ) ) ) |
||

Lee Smith Apr 13, 2015 |
||

I must be missing something here. Why not just Date ( Month ( DateFrom ) - 1 ; Day ( DateFrom ) ; Year (DateFrom ) ) |
||

Rocio, Houston, TX Apr 13, 2015 |
||

Thank you for your comments! Eos, Teg, I guess there are different ways to get to the same result, but I like yours better because it takes lap year into consideration. Thank you! Lee Smith, your calculation won't work correctly for months with 31 days. For example if the input is 12/31/2015, the output is 12/1/2015. In this case, I want the output to be 11/30/2015. Thank you. |
||

Bernard Moreau, Belgium, Borchtlombeek Apr 13, 2015 |
||

Maria, The year of your Sample Output exemple has to be 2014 isn't it ? |
||

unix, Japan Apr 13, 2015 |
||

Here is another one. http://www.briandunning.com/cf/5 put -1 as months parameter get the result you want. and simplify it Let( guess = Date(Month(startDate) + months; Day(startDate); Year(startDate)); guess - Case ( Day (guess) <> Day (startDate) ; Day ( guess ) ) ) |
||

Rocio, Houston, TX Apr 14, 2015 |
||

Yes, Bernand Moreau. Thank you for noticing. I corrected it. | ||

Jeep Watson, Baltimore, MD Apr 14, 2015 |
||

What is purpose of this function? Enter 10/31 returns 9/30 Enter 10/30 returns 9/30 Enter 3/31 returns 2/28 Enter 3/30 returns 2/28 Enter 3/29 returns 2/28 Lesser days do return the same day in the prior month. I just don't see a practical use. Explain. |
||

Rocio, Houston, TX Apr 15, 2015 |
||

Jeep Watson, I created the function because I need to send some paperwork one month before the due date (not just 30 days each time). If the due date is October 31 or October 30, the function will give me September 30 because September only has 30 days. It would be incorrect to have 9/31. The same happens for March; if the due date is the last day of March, I have to send the paperwork the last day of February, which only has 28 days. This function may not be useful for you if you don't have a similar scenario, but at least, it works for my situation. Thank you for your comments. |
||

Samuel, k9ZgA5ytGf Nov 27, 2015 |
||

Hi, I would like to keep the invitations in my inbox so that I can later secarh & find them. (otherwise, we will need a secarh engine which also indexes the calendar).In current v3.1.3, when I accept an invitation, it is deleted from my inbox. I could not find an option not to do it (Outlook has such an option).Thanks. | ||

Note: these functions are not guaranteed or supported by BrianDunning.com. Please contact the individual developer with any questions or problems.