Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

No of Days

Former Member
0 Kudos

Hello ,

i am looking for a Func Mod, which will take two dates as input .

Start date and end date and give me no of saturdays and sundays between them.

Any examples would be helpful.

Rgds,

Ö

1 ACCEPTED SOLUTION

andreas_mann3
Active Contributor
0 Kudos

hi,

try tht sample:

REPORT zforum51 .

PARAMETERS:
           date1 LIKE sy-datum DEFAULT '20060501',
           date2 LIKE sy-datum DEFAULT sy-datum.

DATA i .
DATA z TYPE p DECIMALS 0.
DATA cnt TYPE sy-dbcnt.
DATA cnt_su TYPE sy-dbcnt.
DATA cnt_sa TYPE sy-dbcnt.

WRITE: date1, date2.

WHILE date1 LE date2.

  CALL FUNCTION 'DAY_IN_WEEK'
       EXPORTING
            datum = date1
       IMPORTING
            wotnr = z.

  ADD 1 TO date1.

  IF z = 6.
    ADD 1 TO cnt_sa.
  ELSEIF z = 7.
    ADD 1 TO cnt_su.
  ENDIF.


ENDWHILE.

WRITE: / 'Sun:', cnt_su, 'Sat:', cnt_sa.

pls reward points when answers are helpful

thank you

Andreas

8 REPLIES 8

Former Member
0 Kudos

use fm...

HOLIDAY_GET

Former Member
0 Kudos

Hi one,

Probably this might help u.

1. this program, will work the other way round.

2. a) it will take 2 dates as input

b) it will display all days (other then sat,sun and holidays, based upon factory calendar)

3. just copy paste to get a taste of it.

4.

REPORT abc.

data : num type i.

parameters : frdate type sy-datum default '20060601'.

parameters : todate type sy-datum default sy-datum.

perform getinfo using frdate todate changing num.

break-point.

&----


*& Form getinfo

&----


  • text

----


FORM getinfo USING fromdate todate CHANGING numofdays type i.

DATA : d TYPE sy-datum.

d = fromdate - 1.

DO.

d = d + 1.

IF d > todate.

EXIT.

endif.

CALL FUNCTION 'DATE_CHECK_WORKINGDAY'

EXPORTING

date = d

factory_calendar_id = '01'

message_type = 'I'

EXCEPTIONS

date_after_range = 1

date_before_range = 2

date_invalid = 3

date_no_workingday = 4

factory_calendar_not_found = 5

message_type_invalid = 6

OTHERS = 7.

IF sy-subrc = 0.

numofdays = numofdays + 1.

write 😕 d.

ENDIF.

ENDDO.

ENDFORM. "getinfo

regards,

amit m.

0 Kudos

Hi.

I try to use this code of yours, but my system keeps telling me that DATE_CHECK_WORKINGDAY can not be found. Where can I get this FM?

Former Member
0 Kudos

Hi,

Use either of the following,

CATSXT_GET_HOLIDAYS (In this input last parameter as 'X')

(or)

HOLIDAY_GET

Regs,

Venkat Ramanan

andreas_mann3
Active Contributor
0 Kudos

hi,

try tht sample:

REPORT zforum51 .

PARAMETERS:
           date1 LIKE sy-datum DEFAULT '20060501',
           date2 LIKE sy-datum DEFAULT sy-datum.

DATA i .
DATA z TYPE p DECIMALS 0.
DATA cnt TYPE sy-dbcnt.
DATA cnt_su TYPE sy-dbcnt.
DATA cnt_sa TYPE sy-dbcnt.

WRITE: date1, date2.

WHILE date1 LE date2.

  CALL FUNCTION 'DAY_IN_WEEK'
       EXPORTING
            datum = date1
       IMPORTING
            wotnr = z.

  ADD 1 TO date1.

  IF z = 6.
    ADD 1 TO cnt_sa.
  ELSEIF z = 7.
    ADD 1 TO cnt_su.
  ENDIF.


ENDWHILE.

WRITE: / 'Sun:', cnt_su, 'Sat:', cnt_sa.

pls reward points when answers are helpful

thank you

Andreas

Former Member
0 Kudos

Hi,

If we use CATSXT_GET_HOLIDAYS FM ,it will give total number of sundays and saturdays in that perticular duration.But it will not give how many sundays and saturdays.

If it is useful plz reward points

Thanks,

suma.

Former Member
0 Kudos

Develop a function as below

FUNCTION z_give_sat_sun.

*"----


""Local Interface:

*" IMPORTING

*" VALUE(DATE1) TYPE D OPTIONAL

*" VALUE(DATE2) TYPE D OPTIONAL

*" EXPORTING

*" REFERENCE(NUM1) TYPE I

*" EXCEPTIONS

*" DATE1_GT_DATE2

*" NO_LANGU

*" NO_DATE

*" NO_DAYTXT_FOR_LANGU

*" INVALID_DATE

*" OTHERS

*"----


DATA: num_of_days TYPE i,

date TYPE d,

daynr LIKE hrvsched-daynr,

daytxt LIKE hrvsched-daytxt,

dayfree LIKE hrvsched-noday.

IF date1 GT date2.

RAISE date1_gt_date2.

ELSE.

num_of_days = date2 - date1 + 1.

ENDIF.

date = date1.

DO num_of_days TIMES.

CALL FUNCTION 'RH_GET_DATE_DAYNAME'

EXPORTING

langu = sy-langu

date = date

calid = 'GB'

IMPORTING

daynr = daynr

daytxt = daytxt

dayfree = dayfree

EXCEPTIONS

no_langu = 1

no_date = 2

no_daytxt_for_langu = 3

invalid_date = 4

OTHERS = 5.

IF sy-subrc EQ 0.

IF daynr = 6 OR daynr = 7.

num1 = num1 + 1.

ENDIF.

ELSEIF sy-subrc EQ 1.

RAISE no_langu.

ELSEIF sy-subrc EQ 2.

RAISE no_date.

ELSEIF sy-subrc EQ 3.

RAISE no_daytxt_for_langu.

ELSEIF sy-subrc EQ 4.

RAISE invalid_date.

ELSEIF sy-subrc EQ 5.

RAISE others.

ENDIF.

date = date + 1.

ENDDO.

ENDFUNCTION.

If you want to exclude date1 and date2 from processing use the below code

FUNCTION z_give_sat_sun.

*"----


""Local Interface:

*" IMPORTING

*" VALUE(DATE1) TYPE D OPTIONAL

*" VALUE(DATE2) TYPE D OPTIONAL

*" EXPORTING

*" REFERENCE(NUM1) TYPE I

*" EXCEPTIONS

*" DATE1_GT_DATE2

*" NO_LANGU

*" NO_DATE

*" NO_DAYTXT_FOR_LANGU

*" INVALID_DATE

*" OTHERS

*"----


DATA: num_of_days TYPE i,

date TYPE d,

daynr LIKE hrvsched-daynr,

daytxt LIKE hrvsched-daytxt,

dayfree LIKE hrvsched-noday.

IF date1 GT date2.

RAISE date1_gt_date2.

ELSE.

num_of_days = date2 - date1 - 1.

ENDIF.

date = date1 + 1.

DO num_of_days TIMES.

CALL FUNCTION 'RH_GET_DATE_DAYNAME'

EXPORTING

langu = sy-langu

date = date

calid = 'GB'

IMPORTING

daynr = daynr

daytxt = daytxt

dayfree = dayfree

EXCEPTIONS

no_langu = 1

no_date = 2

no_daytxt_for_langu = 3

invalid_date = 4

OTHERS = 5.

IF sy-subrc EQ 0.

IF daynr = 6 OR daynr = 7.

num1 = num1 + 1.

ENDIF.

ELSEIF sy-subrc EQ 1.

RAISE no_langu.

ELSEIF sy-subrc EQ 2.

RAISE no_date.

ELSEIF sy-subrc EQ 3.

RAISE no_daytxt_for_langu.

ELSEIF sy-subrc EQ 4.

RAISE invalid_date.

ELSEIF sy-subrc EQ 5.

RAISE others.

ENDIF.

date = date + 1.

ENDDO.

ENDFUNCTION.

-Kiran

*Please reward useful answers

Former Member
0 Kudos

Hai Check the following Code

report zrich_0001.

data: begin_date type sy-datum value '20060110',

end_date type sy-datum value '20060125'.

data: idatum type table of sy-datum with header line.

idatum = begin_date.

append idatum.

do.

if idatum = end_date.

exit.

endif.

idatum = idatum + 1.

append idatum.

enddo.

loop at idatum.

write:/ idatum.

endloop.

Thanks & regards

Sreeni