如何连续几天循环

本文关键字:循环 几天 连续 何连续 | 更新日期: 2023-09-27 18:08:02

我正在尝试制作一个包含开始日期和结束日期的字符串。这可以循环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

这里的问题是,2014-01-01和2014-01-04之间有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

我已经玩了几个小时了,但我所做的一切都没有解决这个问题。

如何连续几天循环

这里的问题是,2014-01-01和2014-01-04之间有4天,而不是3天。

有人可能会说,2014-01-01和2014-01-04之间有3天:2014-01-01到2014-01-04期间,经过了三个24小时:

  • 2014-01-01-2014-01-02
  • 2014-01-02-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))
 {
  }

只需更改语句:

DateTime date = StartDate.AddDays(nrOfDaysToLoopBy);

在您的for循环中初始化为

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

问题是,当你添加天数时,你所说的"介于"之间的天数实际上是你添加的天数+1。因此,星期一->星期一(增加了零天(是1天,星期一->星期二(增加了一天(是2天,等等。这就是为什么你需要对开始日期进行-1修改的原因。

循环中不需要每隔一次迭代都进行此更改的原因是myDate = date.AddDays(1)行。这myDatedate之间的差异减少了一,使其回到正确的差异