Just a remark to I0's solution. Though very elegant this only works for values within one year. tachyon's 'roll-your-own-method' works for arbitrary values (within integer range - this could be fixed by using Math::BigInt). Just something to keep in mind ...