Medan jag för de flesta datetime-operationer normalt skulle konvertera till Unixtime och utföra additionssubtraktion etc. på Unixtime-heltalet, kanske du vill titta på Zend-ramverket Zend_Date-klassen.
Detta har mycket av de funktioner du beskriver. Även om Zend faktureras som ett "ramverk" fungerar det exceptionellt bra som ett klassbibliotek att välja och vraka element från. Vi inkluderar det rutinmässigt i projekt och drar sedan in bitar när och när vi behöver dem.