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. php排序集合

    如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作. 经常,开发人员发现在PHP中使用这种数据结构 ...

  2. 阿里云OSS图片上传类

    1.阿里云基本函数 /** * 把本地变量的内容到文件 * 简单上传,上传指定变量的内存值作为object的内容 */ public function putObject($imgPath,$obje ...

  3. jenkins学习(1)

    (1)  按照JAVA, 增加环境变量JAVA_HOME     =      C:\Program Files\Java\jdk1.8.0_31  增加环境变量CLASS_PATH     =   ...

  4. js中的Array

    js中的Array 啥是ArrayLike对象 类似,下面这种对象的就是ArrayLike var arraylike = { 0: "a", 1: "b", ...

  5. FB联网无人机取得重大进展 实现首次成功着陆

    科技讯6月30日消息,据Engadget报道,在过去的几年里,世界最大社交网络Facebook始终在测试其太阳能无人飞机Aquila.2016年6月份,这种联网无人机在美国亚利桑那州的尤马进行了首次全 ...

  6. MySQL5.7新特性

    MySQL5.7介绍 身处 MySQL 这个圈子,能够切身地感受到大家对 MySQL 5.7 的期待和热情,似乎每个人都迫不及待的想要了解.学习和使用 MySQL 5.7.那么,我们不禁要问, MyS ...

  7. 每天一个Linux命令 - 【find】

    命令:find 用途:查找文件并执行指令的操作 [语法]:find [路径] [选项] [参数] [功能介绍]:find命令在指定的目录下查找文件.find命令还能够对查找到的文件执行的指定的操作,通 ...

  8. Listview使用安卓自带布局实现单选

    安卓提供了一些自带的布局,使用非常简单.直接看代码吧. package com.example.linfeng.myapplication; import android.app.Activity; ...

  9. 【原】Coursera—Andrew Ng机器学习—Week 2 习题—Linear Regression with Multiple Variables 多变量线性回归

    Gradient Descent for Multiple Variables [1]多变量线性模型  代价函数 Answer:AB [2]Feature Scaling 特征缩放 Answer:D ...

  10. Animation Parameter

    [Animation Parameter] Animation Parameters are variables that are defined within the animation syste ...