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. (转)IE=EmulateIE7 标签的作用

    本文转载自:http://www.cnblogs.com/0000/archive/2009/11/01/1593851.html 对于 Web 开发人员来说,文本兼容性是一个要考虑的重要问题.Win ...

  2. 【转】java接口的性能测试

    这周尝试了一把性能测试,之前都是测试网站的性能测试,java接口的性能测试还是头一次,学到了很多,特此分享一下. 主要用到了两个性能测试工具,一个是jmeter,一个是LoadRunner. 使用jm ...

  3. cp -f 还是提示是否覆盖

    新做了服务器,cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,这在大量cp覆盖操作的时候是不能忍受的. 把a目录下的文件复制到b目录 以下是代码片段: cp –r a/* b 执行上面的命令时, ...

  4. EasyUI treegrid 加载checked

    EasyUI treegrid  加载checked $(function () { $('#tbDictContTree').treegrid({ title: '数据字典目录管理', iconCl ...

  5. __CLASS__

    <?php class base_class { function say_a() { echo "'a' - said the " . __CLASS__ . " ...

  6. python学习(十四) 网络编程

    14.1 少数几个网络设计模块 14.1.1 socket模块 套接字包括:服务器套接字和客户机套接字. 在创建一个服务器套架字后,让它等待连接,这样它就在摸个网络地址处(IP地址和一个端口号的组合) ...

  7. usb设备驱动程序

    韦老师写的,供参考 /*  * drivers\hid\usbhid\usbmouse.c  */ #include <linux/kernel.h> #include <linux ...

  8. 第一次调用Web service响应速度慢的解决办法

    Env: Client: WinForm(Net Framework 2.0) Server:Web Service(Net Framework 4.0) Problem: Client use pr ...

  9. xml和configparser模块

    一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, 但至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过 ...

  10. 数据库与vs的连接

    新建一个MFC基于对话框的项目后,更改属性, 其中需要将include(里面都是MySQL的头文件)lib是库文件,将.dll放入与.exe同级目录下,或放入系统里(c:\windows\system ...