0

I can't find a clean solution for finding a date at random between two dates, for example :

var date1 = DateTime.Now;
var date2 = DateTime.Now.AddDays(20);

var randomDateBetween = // any date between date1 and date2

Any suggestions for a clean solution to this?

Gert Arnold
  • 105,341
  • 31
  • 202
  • 291

2 Answers2

0

You could do something like this:

        var date1 = DateTime.Now;
        var date2 = DateTime.Now.AddDays(20);
        var days = (date2.Date - date1.Date).Days; // number of days between
        Random rand = new Random();
        int randDays;
        DateTime randomDate;
        if (days < 0)
        {
            randDays = rand.Next(1, Math.Abs(days) - 1);
            randomDate = date2.AddDays(randDays);
        }
        else
        {
            randDays = rand.Next(1, days - 1);
            randomDate = date1.AddDays(randDays);
        }

This should handle case when date2 < date1.

haldo
  • 14,512
  • 5
  • 46
  • 52
-1
private static DateTime GetRandomDate(int daysLater)
{
    if (daysLater < 1) throw new ArgumentException();
    var rnd = new Random();
    var randomDayOfTheYear =
        rnd.Next(DateTimeOffset.Now.DayOfYear, DateTimeOffset.Now.AddDays(daysLater).DayOfYear);
    return new DateTime().AddYears(DateTime.Now.Year).AddDays(randomDayOfTheYear);
}
Ali Alp
  • 691
  • 7
  • 10