what about using an extension method instead, like
public static string FromNowFormatted(this DateTime date)
{
var sb = new StringBuilder();
var t = DateTime.Now - date;
var dic = new Dictionary<string, int>
{
{"years", (int)(t.Days / 365)},
{"months", (int)(t.Days / 12)},
{"days", t.Days},
{"hours", t.Hours},
{"minutes", t.Minutes},
{"seconds", t.Seconds},
};
bool b = false;
foreach (var e in dic)
{
if (e.Value > 0 || b)
{
var v = e.Value;
var k = v == 1 ? e.Key.TrimEnd('s') : e.Key ;
sb.Append(v + " " + k + "\n");
b = true;
}
}
return sb.ToString();
}
demo
Note: there are some things with this code you'll need to fix-up such as the ways years and months are calculated.
Edit: you could use Noda Time's Period.Between() which calculates the difference and then just have an extension method as above, that would simply format it in a similar way. see the secion "Finding a period between two values" here for more info.