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.