<p>Jeff, <a href="https://stackoverflow.com/questions/11/how-do-i-calculate-relative-time/12#12">votre code</a> est bien mais pourrait être plus clair avec des constantes (comme suggéré dans Code Complete).</p>
<p>`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;</p>
<p>var ts = new TimeSpan(DateTime.UtcNow.Ticks - yourDate.Ticks);<br>
double delta = Math.Abs(ts.TotalSeconds);</p>
<p>if (delta < 1 * MINUTE)<br>
return ts.Seconds == 1 ? “one second ago” : ts.Seconds + " seconds ago";</p>
<p>if (delta < 2 * MINUTE)<br>
return “a minute ago”;</p>
<p>if (delta < 45 * MINUTE)<br>
return ts.Minutes + " minutes ago";</p>
<p>if (delta < 90 * MINUTE)<br>
return “an hour ago”;</p>
<p>if (delta < 24 * HOUR)<br>
return ts.Hours + " hours ago";</p>
<p>if (delta < 48 * HOUR)<br>
return “yesterday”;</p>
<p>if (delta < 30 * DAY)<br>
return ts.Days + " days ago";</p>
<p>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>
}</p>
<pre><code class="lang-auto"></code></pre>