For this kind of task, I personally would just use Date::Calc.
If you really want to write your own code, you might want to check out Dave Rolsky's Date, Times, Perl, and You presentation from YAPC::NA 2012. He discusses a lot of the challenges that one needs to keep in mind when dealing with dates and times (time zones, daylight savings time, leap seconds, etc.). If you're just doing this as a learning exercise, you might be willing to ignore some of the issues that Dave discusses in his presentation. However, if you're trying to create production code, you might want to consider leveraging the large amount of work others have put into the existing date and time modules.