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

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

 1 <!-- 限制输入周六周末【disabledDays:[0,6]】  且 只能输入今天及今天以后【minDate:‘%y-%M-{%d}‘】 -->
 2
 3 <input id="beginTime" class="Wdate" type="text" onFocus="WdatePicker({minDate:‘%y-%M-{%d}‘})" >
 4 <br><br>
 5 <input type=‘text‘ id="d" onblur="endTime(this.value)"/>
 6 <br><br>
 7
 8 <input type=‘text‘ id="endTime"  type="text" readonly/>
 9
10
11 <script type="text/javascript">
12         function endTime(day){
13          //开始时间
14          var beginTime = document.getElementById("beginTime").value;
15
16         document.getElementById("endTime").value = getWorkDayCount(beginTime,day);
17
18         }
19
20         //法定节假日和调休日的设定
21          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"];
22
23         //虽然是周末但是还是要上班的【调休】
24         var WeekendsOff = ["2017-9-30"];
25
26         //“2017-10-09”+12
27         function addDate(dateTemp,days){
28
29              var dateTemp = dateTemp.split("-");
30              var nDate = new Date(dateTemp[1] + ‘-‘ + dateTemp[2] + ‘-‘ + dateTemp[0]); //转换为MM-DD-YYYY格式
31              var millSeconds = Math.abs(nDate) + (days * 24 * 60 * 60 * 1000);
32              var rDate = new Date(millSeconds);
33              var year = rDate.getFullYear();
34              var month = rDate.getMonth() + 1;
35             if (month.length==1) month = "0" + month;
36             var date = rDate.getDate();
37            if (date.length==1) date = "0" + date;
38            return (year + "-" + month + "-" + date);
39       }
40        function getWorkDayCount (beginDate, workDay) {
41       /*
42         功能:计算一段时间内工作的天数。不包括周末和法定节假日,法定调休日为工作日,周末为周六、周日两天;
43         参数:
44         beginDate -时间段开始日期;
45         workDay  -工作时间;
46     */
47             var begin = beginDate;
48             var count = 0;
49
50
51         for(var i = 0;i<365;i++){
52
53             beginDate =  addDate(begin,i);
54             var arys1= new Array();
55             arys1=beginDate.split(‘-‘);     //日期为输入日期,格式为 2013-3-10
56              var ssdate=new Date(arys1[0],parseInt(arys1[1]-1),arys1[2]);
57             var day = ssdate.getDay();
58
59             //1、判断输入的开始时间是不是周末
60             if(day==6 || day==0){
61                 //是周末   不是调休  是节假日
62                 if(WeekendsOff.toString().indexOf(beginDate)==-1){
63                     continue;
64                 }else{
65                     count++;
66                 }
67
68             }else{
69                 if(Holiday.toString().indexOf(beginDate)!=-1){
70                     continue;
71                 }else{
72                     count++;
73                 }
74
75             }
76
77
78             if(count==workDay) break;
79
80         };
81
82            //结束时间
83
84         return beginDate;
85     };
86
87     </script>
88
89
90  

原文地址:https://www.cnblogs.com/flysem/p/10236272.html

时间: 2024-10-12 19:47:12

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

sql计算时间差执行存储过程

<pre name="code" class="sql">-- datediff( day, '比较时间', GETDATE() ) DECLARE @ctime INT SELECT @ctime = datediff( day, (SELECT MAX(InDate) FROM OrderSettlement), GETDATE() ) IF @ctime > 0 BEGIN -- 时差大于1天 END 版权声明:本文为博主原创文章,未经博主允

Oracle sql 计算时间差表达式

--取第几天的数据. select * from table where trunc(sysdate)-trunc(cr)=1;  select * from table where trunc(sysdate)-trunc(cr)=2;  select * from table where trunc(sysdate)-trunc(cr)=8;  --获取两时间的相差豪秒数 select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh2

sql server 计算时间差的一部分函数【转】

在做Sql Server开发的时候有时需要获取表中今天.昨天.本周.上周.本月.上月等数据,这时候就需要使用DATEDIFF()函数及GetDate()函数了.DATEDIFF ( datepart , startdate , enddate )释义:计算时间差datepare值:year | quarter | month | week | day | hour | minute | second | millisecondstartdate:开始日期enddate :结束日期GetDate(

DB2数据库用SQL求时间差

一.求天数之差: ( (MIDNIGHT_SECONDS (h.DEAL_DATE) - MIDNIGHT_SECONDS (a.ALLOT_DATE))  / 60*24) 如果需要修改为小时只差,去掉分母的24即可.h.DEAL_DATE结束时间,a.ALLOT_DATE开始时间. 二.SQL计算天数: select days(end_date) - days(start_date) from table;

asp.net中C#中计算时间差代码

我用的最简单的办法是 代码如下 复制代码 DateTime dtone = Convert.ToDateTime("2007-1-1 05:32:22");DateTime dtwo = Convert.ToDateTime("2007-1-1 04:20:15");TimeSpan span = dtone.Subtract(dtwo);Response.Write(span.Days + "天" + span.Hours + "小时

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

一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t timer0 ). 精确到秒. 测试程序如下: #include <time.h> #include <stdio.h> int main() { time_t start ,end ; double cost; time(&start); sleep(1); time(&en

登录超时自动退出,计算时间差-b

// 此方法适用于所有被创建过的controller,且当前controller生命周期存在,如有错误的地方望大神斧正 //  说一下我们的需求和实现原理,需求:在点击home键退出但没有滑飞它,5分钟之后需要重新登录(其实和平安一账通的登录很像) :实现原理:添加观察者,不用我们手动发送通知,系统会自动发送通知,计算时间差,然后就可以啦?? //  贴代码图片 屏幕快照 2016-09-22 下午2.54.31.png //  我是控制的300s,就是5分钟,超过就弹个框,点击后退出 屏幕快照

计算时间差

一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t timer0 ). 精确到秒. 测试程序如下: [c-sharp] view plain copy #include <time.h> #include <stdio.h> int main() { time_t start ,end ; double cost; time(&star

mysql 计算时间差

ROUND(time_to_sec(timediff(m.StartTime, now()))/60) 解析: 比较m.StartTime字段的时间与now()现在的时间差. timediff : 计算时间差 time_to_sec:转化为秒 ROUND :取整