得到两个日期之间的工作日天数?

lvfeng19806001 2009-11-16 08:47:14
如何得到两个日期之间的工作日天数(即每周的周一到周五)?
asp.net中用c#或SQLServer2005实现都可。
我在SQLServer2005中用datediff(dw,date1,date2)得不到工作日天数,得到的仍是日期天数.
...全文
246 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvfeng19806001 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 thanatos_lum 的回复:]
引用 4 楼 lvfeng19806001 的回复:
谢了,得程序实现啊,我还以为有个什么函数能直接得到呢?
谢谢wuyq11了!

有函数啊~!
TimeSpan ts1 = new TimeSpan(Convert.ToDateTime(completedate.Text + " " + completetime.Text).Ticks);
                    TimeSpan ts2 = new TimeSpan(Convert.ToDateTime(dr["StopTime"]).Ticks);
                    TimeSpan ts = ts2.Subtract(ts1).Duration();
                    String spanTime = ts.Days.ToString() + "天" + ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分钟";
[/Quote]
你的思路和上面的差不多,就是把两个间隔差用.Subtract(ts1).Duration()代替了,可你取出来的Days还是天数而不是工作日啊,不过还是谢谢了,我对TimeSpan熟悉了!
lcglvgn 2009-11-17
  • 打赏
  • 举报
回复
顶2楼 用程序做的话必须要这么做
dahaidao 2009-11-17
  • 打赏
  • 举报
回复
什么是工作日?
zzxap 2009-11-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/gaotianle/archive/2007/10/18/1830303.aspx
  • 打赏
  • 举报
回复

#region 计算开始日期到结束日期的天数
/// <summary>
/// 计算开始日期到结束日期的天数(除去周六周天)
/// </summary>
/// <param name="beginTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
private int Compute(string beginTime, string endTime)
{
DateTime bTime = DateTime.Parse(beginTime);
DateTime eTime = DateTime.Parse(endTime);
string[] arrStr = { "sunday", "saturday" };

int sumDay = ((TimeSpan)(eTime - bTime)).Days;//记录计划开始日期跟结束日期间总的天数;
int dateCount = 0; //用于记录消除星期天和星期六后的实际工作天数;
int count = 0; //用于记录星期日和星期六的天数;
for (int i = 0; i < sumDay; i++)
{
for (int j = 0; j < arrStr.Length; j++)
{
if (bTime.AddDays(i).DayOfWeek.ToString().ToLower() == arrStr[j])
{
count++;
break;
}
}
}

dateCount = sumDay - count;

return dateCount;
}
#endregion
Roger370 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lvfeng19806001 的回复:]
谢了,得程序实现啊,我还以为有个什么函数能直接得到呢?
谢谢wuyq11了!
[/Quote]
有函数啊~!
TimeSpan ts1 = new TimeSpan(Convert.ToDateTime(completedate.Text + " " + completetime.Text).Ticks);
TimeSpan ts2 = new TimeSpan(Convert.ToDateTime(dr["StopTime"]).Ticks);
TimeSpan ts = ts2.Subtract(ts1).Duration();
String spanTime = ts.Days.ToString() + "天" + ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分钟";
lvfeng19806001 2009-11-16
  • 打赏
  • 举报
回复
谢了,得程序实现啊,我还以为有个什么函数能直接得到呢?
谢谢wuyq11了!
qqzeng-ip 2009-11-16
  • 打赏
  • 举报
回复
 --计算两个日期相差的工作天数   
CREATE FUNCTION f_WorkDay(
@dt_begin datetime, --计算的开始日期
@dt_end datetime --计算的结束日期
)RETURNS int
AS
BEGIN
DECLARE @workday int,@i int,@bz bit,@dt datetime
IF @dt_begin>@dt_end
SELECT @bz=1,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt
ELSE
SET @bz=0
SELECT @i=DATEDIFF(Day,@dt_begin,@dt_end)+1,
@workday=@i/7*5,
@dt_begin=DATEADD(Day,@i/7*7,@dt_begin)
WHILE @dt_begin<=@dt_end
BEGIN
SELECT @workday=CASE
WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7 BETWEEN 1 AND 5
THEN @workday+1 ELSE @workday END,
@dt_begin=@dt_begin+1
END
RETURN(CASE WHEN @bz=1 THEN -@workday ELSE @workday END)
END
GO

wuyq11 2009-11-16
  • 打赏
  • 举报
回复
public int TotalWorkday(DateTime dts, DateTime dte)
{
TimeSpan ts= new TimeSpan(dte.Ticks - dts.Ticks);
int Result = ((int)ts.TotalDays / 7) * 5;
for (int i = 0; i <= ts.TotalDays % 7; i++)
switch (dts.AddDays(i).DayOfWeek)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
break;
default:
Result++;
break;
}
return Result;
}

declare @s datetime,@e datetime,@days int
select @s='2009-11-14',@e='2009-11-28',@days=0
while @s<@e
begin
if datepart(dw,@s-1+@@datefirst) not in(6,7)
set @days=@days+1
set @s=@s+1
end
select @days
小_虎 2009-11-16
  • 打赏
  • 举报
回复
aa-aa/7*2,这样行不行,呵呵

62,046

社区成员

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

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

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

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