zoukankan      html  css  js  c++  java
  • 根据起止日期构建指定查询条件:第N周(yyyy-MM-dd/yyyy-MM-dd)

              项目中有个查询模块中用到查询条件: 年和周。 以往我直接指定是第几周,后来测试反映如果直接选择周的话并不知道所选周代表的年月日,而无法最快查询数据,后更改查询条件如下: 指定一个起始年月,根据起始年月计算出第一周的日子,然后在第一周的基础上计算剩余周。

             

    效果图:

     算法代码:

    List<dynamic> list2 = new List<dynamic>();
    DateTime startDate = DateTime.Parse("2014" + "-01-01");
    DateTime endDate = DateTime.Parse("2014" + "-12-31");
    TimeSpan ts = (TimeSpan)(endDate - startDate);
     int countday = int.Parse(ts.TotalDays.ToString());//总天数
    int startweek = Convert.ToInt32(startDate.DayOfWeek.ToString("d"));//开始日期星期几
    startweek = startweek == 0 ? 7 : startweek;//星期日为0改为7         
    DateTime startDate2 = startDate.AddDays(-startweek + 1);//把第一周凑满的开始日期
    countday += startweek - 1;//再计算总天数
    double countweek = Math.Ceiling((double)countday / 7);
    if (countweek > 0)
        {
               list2.Add(new { ID = 1, Name = "第1周(" + startDate.ToString("yyyy-MM-dd") + "/" + (startDate2.AddDays(6)).ToString("yyyy-MM-dd") + ")" });
         }
    
     for (int w = 2; w <= countweek; w++)
          {
                    if (w != countweek)
                    {
                        list2.Add(new { ID = w, Name = "第" + w.ToString() + "周(" + startDate2.AddDays(7 * (w - 1)).ToString("yyyy-MM-dd") + "/" + (startDate2.AddDays((7 * w) - 1).ToString("yyyy-MM-dd")) + ")" });
                    }
                    else
                    {
                        list2.Add(new { ID = w, Name = "第" + w.ToString() + "周(" + startDate2.AddDays(7 * (w - 1)).ToString("yyyy-MM-dd") + "/" + (endDate.ToString("yyyy-MM-dd")) + ")" });
                    }
           }
    
                ddlHoursdistribution.DataSource = list2;
                ddlHoursdistribution.DataBind();
    

      

         关键点就是根据开始日期计算第一周的时间,比如2013-1-1周二,那么就在周的基础上减去1天,等于起点就到2012-12-30了,然后在这个基础上+6,完成第一周的计算,剩下的就直接在计算后的日期上相加,由于个人对算法的知识了解的少,请教同事后得出该算法,感谢我的同事。

  • 相关阅读:
    [Luogu] 借教室
    [Luogu] 子共七
    [Luogu] 让我们异或吧
    【bzoj1030】[JSOI2007]文本生成器
    HDU3068 最长回文
    【bzoj2342】[Shoi2011]双倍回文
    【NOIP2012】借教室
    HDU2203 亲和串
    【POJ2001】Shortest Prefixes
    vodevs3031 最富有的人
  • 原文地址:https://www.cnblogs.com/sword-successful/p/3551748.html
Copyright © 2011-2022 走看看