根据年月周或者日期范围的问题

jauntyhand 2013-06-26 12:16:22
我想根据选择的年月周,来获取时间范围。
比如:2013年,7月,二周.那么就是2013-07-08 到 2013-07-14 等
请问怎么计算呀???
...全文
157 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
create function fn_getwk(
    @year int,--输入显示的年份
    @month int, --输入显示的月份
    @type bit=0 --指定每周的第一天,默认为星期日(中国习惯),如果参数为1就是星期一为每周的第一天
) returns @t table(
    周数 nvarchar(10),
    开始日期 varchar(10),
    结束日期 varchar(10)
) as
begin
declare @d datetime
set @d=dateadd(wk,datediff(wk,'1900',cast(ltrim(@year*10000+@month*100+1) as datetime)),'1900')+@type
;with t as
(
    select top (datediff(dd,ltrim(@year*10000+@month*100+1),ltrim(@year*10000+(@month+1)*100+1)))
        [date]=cast(ltrim(@year*10000+@month*100+1) as datetime)-1
            +row_number()over(order by getdate())
    from sysobjects 
)
insert @t
    select 
        case 
            when [date] between @d and @d+5 then '第一周'
            when [date] between @d+6 and @d+12 then '第二周'
            when [date] between @d+13 and @d+19 then '第三周'
            when [date] between @d+20 and @d+26 then '第四周'
            when [date] between @d+27 and @d+33 then '第五周'
            else '第六周'
        end AS 周数,
        convert(varchar,min([date]),23) 开始日期,
        convert(varchar,max([date]),23) 结束日期
    from t
    group by 
        case 
            when [date] between @d and @d+5 then '第一周'
            when [date] between @d+6 and @d+12 then '第二周'
            when [date] between @d+13 and @d+19 then '第三周'
            when [date] between @d+20 and @d+26 then '第四周'
            when [date] between @d+27 and @d+33 then '第五周'
            else '第六周'
        end
    order by 2
    return
end
GO

select * from fn_getwk(2011,3,0)
/*
周数         开始日期       结束日期
---------- ---------- ----------
第一周        2010-05-01 2010-05-01
第二周        2010-05-02 2010-05-08
第三周        2010-05-09 2010-05-15
第四周        2010-05-16 2010-05-22
第五周        2010-05-23 2010-05-29
第六周        2010-05-30 2010-05-31

(6 行受影响)
*/
select * from fn_getwk(2010,5,1)
/*
周数         开始日期       结束日期
---------- ---------- ----------
第一周        2010-05-01 2010-05-02
第二周        2010-05-03 2010-05-09
第三周        2010-05-10 2010-05-16
第四周        2010-05-17 2010-05-23
第五周        2010-05-24 2010-05-30
第六周        2010-05-31 2010-05-31

*/
phoebuswei 2013-06-27
  • 打赏
  • 举报
回复
2013年,7月,二周 就是得到当前月份的一天,看他是不是星期1 如果是,第二周起始就是当前+7结束就是+14
joyhen 2013-06-26
  • 打赏
  • 举报
回复
EnForGrass 2013-06-26
  • 打赏
  • 举报
回复
手写的,自己看看哪里需要修改 //当月的天数 protected int solarDays(int y, int m) { int[] solarMonth = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (m == 2) return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28); else return (solarMonth[m - 1]); } protected void Button1_Click(object sender, EventArgs e) { var year = 2013; var month = 2; var week = 2; int c; c = solarDays(year, month); DateTime start = new DateTime(year, month, week > 1 ? (week - 1) * 7 + 1 : 1); DateTime end; if (start.Day <= c) { end = start.AddDays(6); } else { end = new DateTime(year, month, c); } }
gudujianxiao 2013-06-26
  • 打赏
  • 举报
回复
create table A(dateAdded datetime) declare @StartTime datetime='2013-07-01', @EndTIme datetime ='2013-08-01' while @StartTime<=@EndTIme begin insert into A(dateAdded) select @StartTime set @StartTime=DATEADD(day,1,@StartTime) end /*DateAdded 这个字段是表中对应的字段*/ select CASE WHEN DateAdd(day,datediff(day,@StartTime,a.DateAdded)/7*7+6,@StartTime)> @EndTime THEN CONVERT(varchar(100), DateAdd(day,datediff(day,@StartTime,a.DateAdded)/7*7,@StartTime), 23) +'~'+CONVERT(varchar(100), @EndTime, 23) ELSE CONVERT(varchar(100), DateAdd(day,datediff(day,@StartTime,a.DateAdded)/7*7,@StartTime), 23) +'~'+CONVERT(varchar(100), DateAdd(day,datediff(day,@StartTime,a.DateAdded)/7*7+6,@StartTime), 23) END AS WeekZone from A as a
  • 打赏
  • 举报
回复
yyantifa 2013-06-26
  • 打赏
  • 举报
回复
自己拼接……

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧