A quick CPAN search on the terms date time datetime calc (e.g...) should give you all the tools that you could possibly need, should you decide not to do the job in SQL. (And, frankly, “I’d rather not,” because I tend to find SQL functions both non-standard and sometimes wanting.)
I don’t know if DateTime::Calendar::Mayan has been updated for 2012 yet, or not, but it’s there, nevertheless.
Any way you do it, you do it the same way: convert whatever string you have into an opaque date/time value, manipulate the value with the tools provided, then convert it back to a string. Use your own regular expressions, or ones cabbaged from Regexp::Common, to fill in any gaps.