计算两个日期之间的工作日

兰大顾的。。。

FUNCTION zget_workdays.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(I_DATE1) LIKE  SY-DATUM
*"     VALUE(I_DATE2) LIKE  SY-DATUM
*"  EXPORTING
*"     VALUE(E_DAYS) TYPE  I
*"----------------------------------------------------------------------
  DATA: week1   TYPE scal-week,
        monday1 TYPE sy-datum,
        sunday1 TYPE sy-datum,
        week2   TYPE scal-week,
        monday2 TYPE sy-datum,
        sunday2 TYPE sy-datum,
        days1    TYPE i,
        days2    TYPE i,
        wotnr1   TYPE p,
        wotnr2   TYPE p.

  CHECK i_date2 GE i_date1.

  CALL FUNCTION ‘DAY_IN_WEEK‘
    EXPORTING
      datum = i_date1
    IMPORTING
      wotnr = wotnr1.

  CALL FUNCTION ‘DAY_IN_WEEK‘
    EXPORTING
      datum = i_date2
    IMPORTING
      wotnr = wotnr2.

  "计算开始日期所在周
  CALL FUNCTION ‘GET_WEEK_INFO_BASED_ON_DATE‘
    EXPORTING
      date   = i_date1
    IMPORTING
      week   = week1
      monday = monday1
      sunday = sunday1.

  "计算结束日期所在周
  CALL FUNCTION ‘GET_WEEK_INFO_BASED_ON_DATE‘
    EXPORTING
      date   = i_date2
    IMPORTING
      week   = week2
      monday = monday2
      sunday = sunday2.

  IF week1 EQ week2.
    IF wotnr1 GE 5.
      e_days = 0.
      EXIT.
    ELSE.
      IF wotnr2 LE 5.
        e_days = i_date2 - i_date1 .
      ELSEIF wotnr2 EQ 6.
        e_days = i_date2 - i_date1 - 1.
      ELSEIF wotnr2 EQ 7.
        e_days = i_date2 - i_date1 - 2.
      ENDIF.
    ENDIF.
  ELSE.
    IF wotnr1 gt 5.
      days1 = 0.
    ELSE.
      days1 = sunday1 - 2 - i_date1 + 1.
    ENDIF.

    IF wotnr2 GT 5 .
      days2 = 4.
    ELSE.
      days2 = i_date2 - monday2.
    ENDIF.

    e_days = ( week2 - week1 - 1 ) * 5 + days1 + days2.

  ENDIF.

ENDFUNCTION.
时间: 2024-10-11 16:06:24

计算两个日期之间的工作日的相关文章

用VBA计算两个日期之间的工作日(去掉周末两天)

最近公司HR和Finance想算员工的工作天数,想让我帮忙写些VBA,自己从网上找了下代码,自己再改改,以下来自网络. 计算两个日期之间的工作日,用VBA,因量大,最好用数组做 Sub kk() Dim arr, i&, j&, m& arr = Sheet2.Range("b3:f4") For i = 1 To UBound(arr) m = 0 For j = arr(i, 1) To arr(i, 3) If Weekday(j) <> 1

计算两个日期之间的工作日天数

最近遇到要求两个日期之间的工作日天数的问题,遂在网上找了下js的代码,参考了下别人的代码,发现写的都有些冗余,于是自己思考,进行了一下简单处理.主要是在循环处理上进行了精简. 对剩余天数的循环,也就可以考虑是对开始日期到剩余天数之间的处理,循环开始日期到剩余天数之间有多少个周六周日(最多只有一个周六或者一个周日),由于当前开始日期在(0-6)之间,也就是当前开始日期的星期对应的数字加上剩余天数(0-6)的循环一定在(0-11)之间,所以0,7代表周日,6代表周六. <html> <hea

计算两个日期之间的工作日(去掉周末和节假日)

1 package com.utouu.uphone.commons; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.ArrayList; 6 import java.util.Calendar; 7 import java.util.Date; 8 import java.util.Iterator; 9 import java.util.List; 10

mysql 计算两个日期之间的工作日天数

创建透视表t500 建表 CREATE TABLE `t500` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=501 DEFAULT CHARSET=latin1; 插入500条数据 CREATE DEFINER=`json`@`%` PROCEDURE `i500`() BEGIN DECLARE a INT default 1; while a<=500 d

【翻译自mos文章】计算Oracle数据库中两个日期之间的工作日天数

计算两个日期之间的工作日天数(不包括这两个日期,不包括weekend) 参考自: How to Compute Business Days for a Date Range in SQL or PLSQL (Doc ID 1014162.6) 有两个方法: 第一个是 使用sql语句: SQL> SELECT ((TO_NUMBER(TRUNC(to_date('2015-04-22','yyyy-mm-dd'), 'D') - TRUNC(to_date('2015-04-21','yyyy-m

(013)每日SQL学习:确定两个日期之间的工作日天数和计算一年周内各日期次数

1.确定两个日期之间的工作日天数 --确定两个日期之间的工作日天数with x0 as (select to_date('2018-01-01','yyyy-mm-dd') as 日期 from dual union all select to_date('2018-01-15','yyyy-mm-dd') as 日期 from dual ), x1 as --日期并列显示 (select min (日期) 开始日期,max(日期) 结束日期 from x0 ), x2 as --日期之间的天数

计算两个日期之间相差几天(Date类型与String类型互相转换)

一:计算两个日期之间相差几天 1 /** 2 * 3 */ 4 package com.hlcui.date; 5 6 import java.text.ParseException; 7 import java.text.SimpleDateFormat; 8 import java.util.Calendar; 9 import java.util.Date; 10 11 import org.junit.Test; 12 13 /** 14 * @author Administrator

java计算两个日期之间相隔的天数

1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.Date; 5 6 7 public class date { 8 9 /** 10 * @param args 11 * @throws ParseException 12 */ 13 public static void main(String[] arg

Java 根据给定的日期,计算两个日期之间的时间差

计算两个Date之间的时间差,基本思路为把Date转换为ms(微秒),然后计算两个微秒时间差. 时间的兑换规则如下: 1s秒 = 1000ms毫秒 1min分种 = 60s秒 1hours小时 = 60min分钟 1day天 = 24hours小时 package com.qiyadeng.date; import java.text.SimpleDateFormat; import java.util.Date; public class DateDifferentExample { publ