[C#] 指定した日時の相対時間(何年前? 何ヶ月前?など)を計算する方法


はじめに

ある日時を指定し、その日時が現在の何年前なのか、何ヶ月前なのか、何日前なのか、何時間前なのかを計算する方法の備忘録です。

今回のサンプルは、計算した結果の値に応じて「〜前」の単位を変えています。

 

サンプルコード

class Program
{
    static void Main(string[] args)
    {
        System.Console.WriteLine(Sample());
    }

    private static string Sample()
    {
        DateTime myDate = Convert.ToDateTime("2019/10/20");

        const int SECOND = 1;
        const int MINUTE = 60 * SECOND;
        const int HOUR = 60 * MINUTE;
        const int DAY = 24 * HOUR;
        const int MONTH = 30 * DAY;

        var ts = new TimeSpan(DateTime.UtcNow.Ticks - myDate.Ticks);
        double delta = Math.Abs(ts.TotalSeconds);

        if (delta < 1 * MINUTE)
            return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";

        if (delta < 2 * MINUTE)
            return "a minute ago";

        if (delta < 45 * MINUTE)
            return ts.Minutes + " minutes ago";

        if (delta < 90 * MINUTE)
            return "an hour ago";

        if (delta < 24 * HOUR)
            return ts.Hours + " hours ago";

        if (delta < 48 * HOUR)
            return "yesterday";

        if (delta < 30 * DAY)
            return ts.Days + " days ago";

        if (delta < 12 * MONTH)
        {
            int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
            return months <= 1 ? "one month ago" : months + " months ago";
        }
        else
        {
            int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
            return years <= 1 ? "one year ago" : years + " years ago";
        }
    }

}

myDateに「〜前」の知りたい日時を指定すると、その結果が出力されます。

今回は「2019/10/20"」を指定しました。

実行日時は「2020/5/9」のため結果は「6 months ago」となります。

6 months ago

 

最後に

そのまま使えますので、利用してみてください。