Search code examples
datetimedateerlangdate-arithmetic

Date arithmetic in Erlang


I have a date in this format {Y,M,D}. Is there any good supporting libraries or, tricks I can use to simply, say subtract three months from this date without running into problem with invalid dates, leap years, etc.

My latest similar use is in MySql where you can type:

Select '2011-05-31' - Interval 3 Month;

which yields '2011-02-28'. I am not interested in how to write this library myself, that is what I would like to avoid.


Solution

  • Use edate - specifically the shift function.

    > edate:shift({2011,5,31}, -3, months).
    {2011,2,28}
    

    Under the hood it uses the calendar module, so it correctly deals with all of the corner cases.