2014-06-11 45 views
0

我想制作一个字符串与开始日期和结束日期。这可以循环使用X天。如何正确地循环天

int nrOfDaysToLoopBy = 3; 

List<string> Dates = new List<string>(); 

string startDate = "2014-01-01"; //this date is given to me by an api I am just hard codeing for testing 
string endDate = "2014-01-30"; 
DateTime StartDate = DateTime.ParseExact(startDate, "yyyy-MM-dd", CultureInfo.InvariantCulture); 
DateTime EndDate = DateTime.ParseExact(endDate, "yyyy-MM-dd", CultureInfo.InvariantCulture); 

DateTime myDate = StartDate; // setting the initial date 

for (DateTime date = StartDate.AddDays(nrOfDaysToLoopBy); date.Date <= EndDate.Date; date = date.AddDays(nrOfDaysToLoopBy)) 
{ 
    Dates.Add("start-date=" + myDate.ToString("yyyy-MM-dd") + "&end-date=" + date.ToString("yyyy-MM-dd")); 
    myDate = date.AddDays(1); 
} 

// Dealing with any left over days. 
if (myDate != EndDate && EndDate > myDate) 
{ 
    Dates.Add("start-date=" + myDate.ToString("yyyy-MM-dd") + "&end-date=" + EndDate.ToString("yyyy-MM-dd")); 
} 

我的结果:

start-date=2014-01-01&end-date=2014-01-04 
start-date=2014-01-05&end-date=2014-01-07 

这里的问题是,有为4d 2014年1月1日和2014年1月4日之间不3.

结果我想得到:

start-date=2014-01-01&end-date=2014-01-03 
start-date=2014-01-04&end-date=2014-01-06 

更新: 我们能否同意2014-01-01&end-date=2014-01-04之间的日子是 2014-01-01, 2014-01-02, 2014-01-03, and 2014-01-04这就是4

我一直在玩这个几个小时,现在没有我已经解决了这个问题。

+0

什么是'nrOfDaysToLoopBy'为贵“的结果,我试图让”? – balexandre

+0

哎呀抱歉忘记了我添加它的变量。int nrOfDaysToLoopBy = 3; – DaImTo

+0

try int nrOfDaysToLoopBy = 2 –

回答

1

这里的问题是,有2014年1月1日和2014年1月4日不3.

有人可能会说有2014年1月1日之间的3天之间4天2014年1月4日:2014年1月1日之间,和2014年1月4日,三个周期24小时通过:

  • 2014年1月1日 - 2014年1月2日
  • 2014年1月2日 - 2014-01-03
  • 2014-01-03 - 2014-01 -04

你看,问题是你如何定义之间。如果您想包含开始日期,则需要调整添加日期的数量。

编辑:

这解决了这个问题。 nrOfDaysToLoopBy-1

for (DateTime date = StartDate.AddDays(nrOfDaysToLoopBy-1); date.Date <= EndDate.Date; date = date.AddDays(nrOfDaysToLoopBy)) 
{ 
    } 
+0

“你需要调整nrOfDaysToLoopBy”什么调整会产生所需的输出? –

+0

我们是否可以同意2014-01-01和结束日期= 2014-01-04之间的日期为2014-01-01,2014-01-02,2014-01-03和2014-01-04这4 – DaImTo

+0

@目标:我已经更新了我的答案,以使其更加清晰。 – Heinzi

1

只需更改声明:在你for环路初始化

DateTime date = StartDate.AddDays(nrOfDaysToLoopBy); 

DateTime date = StartDate.AddDays(nrOfDaysToLoopBy-1); 

的问题是,当你添加天,之间的天数” “正如你所说的那样,实际上是你添加+1天的天数。所以星期一 - >星期一(加上零天)是1天,星期一 - >星期二(添加一天)是2天等。这就是为什么你需要-1修改开始日期。

你不需要在循环的每一个其他迭代上需要这种改变的原因是因为myDate = date.AddDays(1)行。这减少一个myDatedate之间的区别,把它回到正确的差异

+0

+1用于表达我只能通过示例解释的内容。 – Heinzi