<t>Jeff, your code is nice but could be clearer with constants (as suggested in Code Complete).<br/>
<br/>
`const int SECOND = 1;<br/>
const int MINUTE = 60 * SECOND;<br/>
const int HOUR = 60 * MINUTE;<br/>
const int DAY = 24 * HOUR;<br/>
const int MONTH = 30 * DAY;<br/>
<br/>
var ts = new TimeSpan(DateTime.UtcNow.Ticks - yourDate.Ticks);<br/>
double delta = Math.Abs(ts.TotalSeconds);<br/>
<br/>
if (delta < 1 * MINUTE)<br/>
return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";<br/>
<br/>
if (delta < 2 * MINUTE)<br/>
return "a minute ago";<br/>
<br/>
if (delta < 45 * MINUTE)<br/>
return ts.Minutes + " minutes ago";<br/>
<br/>
if (delta < 90 * MINUTE)<br/>
return "an hour ago";<br/>
<br/>
if (delta < 24 * HOUR)<br/>
return ts.Hours + " hours ago";<br/>
<br/>
if (delta < 48 * HOUR)<br/>
return "yesterday";<br/>
<br/>
if (delta < 30 * DAY)<br/>
return ts.Days + " days ago";<br/>
<br/>
if (delta < 12 * MONTH)<br/>
{<br/>
int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));<br/>
return months <= 1 ? "one month ago" : months + " months ago";<br/>
}<br/>
else<br/>
{<br/>
int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));<br/>
return years <= 1 ? "one year ago" : years + " years ago";<br/>
}<br/>
<br/>