You don't have to worry about some months having 30 days and some not. If you have the timespan you can directly decrement the current date by that span.
TimeSpan ts = new TimeSpan(5,0,0);
var earned = DateTime.Now - ts;
Console.Write(earned);
This can be done in or out of your service, but I would perform it in the service if the actual date is what's needed.
Also you can add a regular expression if you need to add some flexibility later on.
string input = "Attained:17 months ago";
string pattern = @"Attained:(?<value>[0-9]+) (?<unit>(years|months|days)) ago";
var match = Regex.Match(input, pattern);
if(match.Success)
{
int value = Int32.Parse(match.Groups["value"].Value);
string unit = match.Groups["unit"].Value;
Console.WriteLine(value);
Console.WriteLine(unit);
}
Could make unit an enum as well