SQL计算时间差并排除周末

CREATE FUNCTION DI_FN_GET_WorkDay
(@begin DATETIME , @end DATETIME )
RETURNS int
BEGIN
DECLARE @i INT , @j INT SET @i = 0 SET @j = 0
IF @end > @begin
BEGIN
WHILE DATEDIFF(d, DATEADD(d, @i, @begin), @end) <> 0
BEGIN IF DATEPART(weekday, DATEADD(d, @i, @begin)) NOT IN ( 1, 7 )
SET @j = @j + 1
SET @i = @i + 1
END
END
SELECT @j = ( @j + 1 ) * 24 * 60 - DATEDIFF(Minute, CAST(CONVERT(VARCHAR(10), @begin, 120) AS DATETIME), @begin)
- DATEDIFF(Minute, @end, CAST(CONVERT(VARCHAR(10), @end + 1, 120) AS DATETIME))
RETURN @j END

sql   计算结束时间  去除周六周末,

SQL里dateadd计算日期时跳过周六周日两天计算日期

-- 自定义dateadd函数,跳过周六周日.
create function [dbo].[dateadd2]
(@date0 datetime,
@x int)
returns datetime
as
begin
declare @i int,@date1 datetime
select @i=1,@date1=@date0 while(@i<=@x)
begin
select @date1=dateadd(d,1,@date1) if datepart(dw,@date1) not in(1,7)
begin
select @i=@i+1
end
end return @date1
end
-- 测试1
select dateadd(D,7,'2015-04-01') 'dateadd',dbo.dateadd2('2015-04-01',7) 'dateadd2'
/*
dateadd dateadd2
----------------------- -----------------------
2015-04-08 00:00:00.000 2015-04-10 00:00:00.000 (1 row(s) affected)
*/ -- 测试2
select dateadd(D,14,'2015-04-01') 'dateadd',dbo.dateadd2('2015-04-01',14) 'dateadd2'
/*
dateadd dateadd2
----------------------- -----------------------
2015-04-15 00:00:00.000 2015-04-21 00:00:00.000 (1 row(s) affected)
*/

  

 

输入开始时间和工作天数,计算结束时间,需考虑节假日周末和调休

 <!-- 限制输入周六周末【disabledDays:[0,6]】  且 只能输入今天及今天以后【minDate:'%y-%M-{%d}'】 -->

 <input id="beginTime" class="Wdate" type="text" onFocus="WdatePicker({minDate:'%y-%M-{%d}'})" >
<br><br>
<input type='text' id="d" onblur="endTime(this.value)"/>
<br><br> <input type='text' id="endTime" type="text" readonly/> <script type="text/javascript">
function endTime(day){
//开始时间
var beginTime = document.getElementById("beginTime").value; document.getElementById("endTime").value = getWorkDayCount(beginTime,day); } //法定节假日和调休日的设定
var Holiday = ["2017-10-1", "2017-10-2", "2017-10-3","2017-10-4","2017-10-5", "2017-10-6", "2017-10-7", "2017-10-8"]; //虽然是周末但是还是要上班的【调休】
var WeekendsOff = ["2017-9-30"]; //“2017-10-09”+12
function addDate(dateTemp,days){ var dateTemp = dateTemp.split("-");
var nDate = new Date(dateTemp[1] + '-' + dateTemp[2] + '-' + dateTemp[0]); //转换为MM-DD-YYYY格式
var millSeconds = Math.abs(nDate) + (days * 24 * 60 * 60 * 1000);
var rDate = new Date(millSeconds);
var year = rDate.getFullYear();
var month = rDate.getMonth() + 1;
if (month.length==1) month = "0" + month;
var date = rDate.getDate();
if (date.length==1) date = "0" + date;
return (year + "-" + month + "-" + date);
}
function getWorkDayCount (beginDate, workDay) {
/*
功能:计算一段时间内工作的天数。不包括周末和法定节假日,法定调休日为工作日,周末为周六、周日两天;
参数:
beginDate -时间段开始日期;
workDay -工作时间;
*/
var begin = beginDate;
var count = 0; for(var i = 0;i<365;i++){ beginDate = addDate(begin,i);
var arys1= new Array();
arys1=beginDate.split('-'); //日期为输入日期,格式为 2013-3-10
var ssdate=new Date(arys1[0],parseInt(arys1[1]-1),arys1[2]);
var day = ssdate.getDay(); //1、判断输入的开始时间是不是周末
if(day==6 || day==0){
//是周末 不是调休 是节假日
if(WeekendsOff.toString().indexOf(beginDate)==-1){
continue;
}else{
count++;
} }else{
if(Holiday.toString().indexOf(beginDate)!=-1){
continue;
}else{
count++;
} } if(count==workDay) break; }; //结束时间 return beginDate;
}; </script>

SQL计算时间差并排除周末的更多相关文章

  1. SQL计算时间差,要精确到小时分钟秒

    declare @starttime as datetime declare @endtime as datetime set @starttime = '2009-11-24 15:10:00' s ...

  2. 用 SQL 计算时间差值

    ;WITH res1 AS ( SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY F2 ORDER BY F1) AS rn,F1,F2 F ...

  3. SQL Server DATEDIFF() 函数(SQL计算时间差)

    select  *   from   task_list  where 1=1 and    datediff(dd,carateTime,getdate()) =0      定义和用法 DATED ...

  4. DB2--sql计算时间差和格式化时间

    格式化时间 db2 格式化时间使用的 TO_CHAR(TIMESTAMP('2017-10-24 21:18:12'),'YYYY-MM-DD'): 测试sql:SELECT TO_CHAR(TIME ...

  5. 使用SQL计算宝宝每次吃奶的时间间隔

    需求:媳妇儿最近担心宝宝的吃奶时间不够规律,网上说是正常平均3小时喂奶一次,让我记录下每次的吃奶时间,分析下实际是否偏差很大,好在下次去医院复查时反馈给医生. 此外,还要注意有时候哭闹要吃奶,而实际只 ...

  6. SQL 计算列

    SQL计算列,可以解决一般标量计算(数学计算,如ColumnA*ColumnB)的问题,而子查询计算(如select sum(salary) from tableOther where id=’ABC ...

  7. Android计算时间差

    想要写个根据消耗时长来确定开始结束时间的小工具,发现Android处理时间上有点累,可能是我没找到合适的方法吧,先把我的解决办法贴出来,有好的解决方法还希望提醒一下: 1.根据时间字符串获取毫秒数 p ...

  8. 【转载】c/c++在windows下获取时间和计算时间差的几种方法总结

    一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t time ...

  9. C#计算时间差值

    /// <summary> /// 计算时间差值 /// </summary> /// <param name="DateTime1">< ...

随机推荐

  1. unittest--unittest.defaultTestLoader()的方法

    unittest.defaultTestLoader(): defaultTestLoader()类,通过该类下面的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(t ...

  2. ITextSharp Table使用 (转)

    原文:http://www.cnblogs.com/LifelongLearning/archive/2011/05/16/2048116.html 表格是我们在制作文档时,经常使用的一个元素.对布局 ...

  3. 1133 Splitting A Linked List

    题意:把链表按规则调整,使小于0的先输出,然后输出键值在[0,k]的,最后输出键值大于k的. 思路:利用vector<Node> v,v1,v2,v3.遍历链表,把小于0的push到v1中 ...

  4. linux lcd设备驱动剖析二

    上一节中,分析了s3c2410fb,c的入口出口函数,以及一些重要结构体的分析,初步知道了这是一个平台驱动的架构. 上一节文章链接:http://blog.csdn.net/lwj103862095/ ...

  5. Flask之数据库迁徙

    4.3 数据库迁移 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把 ...

  6. Command对象

  7. 15 更多jQuery知识

    jqueryUI 官网: https://jqueryui.com/ jqueryUI 中文网: http://www.jqueryui.org.cn/ jquery插件内容包含 官网demo: ht ...

  8. Sql Server 2005如何导入DBF文件?

    提问者采纳   select * into 要生成的SQL表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase IV;HDR=NO;IMEX=2;DA ...

  9. linux下编译wpa_supplicant&nbsp;…

    linux下编译wpa_supplicant 收藏 前一段时间只在vs2005下编译成功过.经过近一段时间的琢磨,今天终于在linux下成功编译了wpa_supplicant. 挺简单的事情折腾了这么 ...

  10. 在ubuntu中安装minicom时出现devic…

    未正常关闭minicom yesaidu@ywf-ubuntu: ~$ ls /var/lock LCK..ttyS0  subsys yesaidu@ywf-ubuntu: ~$ kill 0 ye ...