DATE(
YEAR(TODAY()),
MONTH(TODAY()),
CASE( MONTH(TODAY()),
1, 31,
2, IF( MOD( YEAR(TODAY()), 4) = 0, 29, 28),
3, 31,
4, 30,
5, 31,
6, 30,
7, 31,
8, 31,
9, 30,
10, 31,
11, 30,
12, 31,
DAY(TODAY())
)
)
for(My_Object__c o : trigger.new){
o.Contract_End_Date__c = o.Contract_Start_Date__c.addMonths(o.Contract_Length__c);
}