Did you know date fields can be added to each other ? A week from now is sy-datum + 7 and there is a function module to check whether the date entered is plausible. Times too ? Times too.
Check out whether a date is plausible with function module DATE_CHECK_PLAUSIBILITY
. There is also a TIME_CHECK_PLAUSIBILITY
.
If you need to know how much time was lost in 2 date/times, you can use function module MONTHS_BETWEEN_TWO_DATES
or COMPUTE_YEARS_BETWEEN_DATES
or a more elaborate DURATION_DETERMINE
, which will take a start date, start time and an end date and end time (and a factory calendar as well). The unit of duration (hours, minutes, ...) can also be specified. If you need to work out which end date/time goes with a certain start date/time and duration, you can use END_TIME_DETERMINE
. Need to go back in time and calculate a start data/time ? You guessed it: START_TIME_DETERMINE
.
Turn your date into a textual date ? Call CONVERSION_EXIT_LDATE_OUTPUT
with your (internal) date, call it with 20130822
will return 22. August 2013
Check out class CL_BS_PERIOD_TOOLSET_BASICS
, which is packed with date calculation utilities.
* Add minutes to a date: CL_BS_PERIOD_TOOLSET_BASICS=>ADD_MINUTES_TO_DATE( exporting iv_date = lv_today iv_time = lv_now iv_minutes = 4123 importing ev_date = lv_today ev_time = lv_then ). * Get the first day of the previous month lv_last_month = CL_BS_PERIOD_TOOLSET_BASICS=>
GET_FIRST_DAY_PREV_MONTH( IV_DATE = sy-datum ).
Also check out CONV_DATE_TO_EXTERNAL
, CONV_DATE_TO_INTERNAL
, GET_WEEKDAY_NUMBER
, SUBTRACT_MONTHS_FROM_DATE
and many many more. Like SD_DATETIME_DIFFERENCE
or SD_CALC_DURATION_FROM_DATETIME
.
Alternatively, calculations can be done directly in Abap. Simply subtract the times 9:25 and 12:30 like so:
data: lt_t1 type sy-uzeit value '091500', lt_t2 type sy-uzeit value '123000'. lt_t1 = lt_t2 - lt_t1. write lt_t1 using edit mask '__:__'.
This example will show:
03:15
Do make sure you set the times to a time including seconds, otherwise this calculation won't work. You can also us a calculation enabling type case for times like this:
data: begin of lw_timecaster, h type n length 2, m type n length 2, s type n length 2, end of lw_timecaster, lv_hours type p length 5 decimals 2. move lt_t1 to lw_timecaster. lv_hours = lw_timecaster-h + ( lw_timecaster-m / 60 ). write lv_hours decimals 2.
For which the output would show as
3.25