Date ranges from a given start date
The loop to find the starting date is clearly not needed.  This can be done with library object TimeSpan -- like this:

void Main()
{
  var startDate = new DateTime(2014, 1, 1);
  var dates = new List&lt;DateBlock&gt;();

  int priorPeriods = ((DateTime.UtcNow-startDate).Days) / 30;

  DateTime dateIndex = startDate.AddDays(priorPeriods*30);
  for(int index = 0; index &lt; 6; index++)
  {
     dates.Add(new DateBlock { StartDate = dateIndex, EndDate = dateIndex.AddDays(30) });
     dateIndex = dateIndex.AddDays(30);
  }
}

public class DateBlock
{
   public DateTime StartDate { get; set;}
   public DateTime EndDate { get; set; }
}


You might have to check the edge case (today is exactly divisible by 30) to see it matches requirements.



Here is how you do it with linq (looks cooler, but slower)

void Main()
{
  var startDate = new DateTime(2014, 1, 1);
  var dates = new List&lt;DateBlock&gt;();

  int priorPeriods = ((DateTime.UtcNow-startDate).Days) / 30;

  dates = Enumerable.Range(0,6)
                .Select(index =&gt; new DateBlock {
                                   StartDate = startDate.AddDays((priorPeriods+index)*30),
                                   EndDate =startDate.AddDays((priorPeriods+index+1)*30)
                }).ToList();
 }

public class DateBlock
{
   public DateTime StartDate { get; set;}
   public DateTime EndDate { get; set; }
}