Skip to content

How to Calculate the Difference in Minutes Between Two Times in Batch Script

Learn how to compute the time difference in minutes between two timestamps in a Windows Batch script, including handling midnight crossing and parsing 24-hour format times.

Measuring the time elapsed between two events is essential for performance monitoring, SLA compliance, and execution benchmarking. While comparing raw time strings is difficult, converting both timestamps to a single unit, Total Minutes since midnight, makes the subtraction trivial.

In this guide, we will demonstrate how to calculate the difference in minutes between two given times.

The Strategy: Convert to Minutes, Then Subtract

  1. Parse Time A into Hours and Minutes.
  2. Convert to "Total Minutes": TotalA = (Hours * 60) + Minutes.
  3. Do the same for Time B.
  4. The difference is |TotalB - TotalA|.

Implementation Script

@echo off
setlocal enabledelayedexpansion

:: 1. Input two times (24-hour format HH:MM)
set "timeA=09:15"
set "timeB=14:42"

:: 2. Parse Time A
for /f "tokens=1,2 delims=:" %%A in ("!timeA!") do (
    set /a "hA=1%%A - 100"
    set /a "mA=1%%B - 100"
)

:: 3. Parse Time B
for /f "tokens=1,2 delims=:" %%A in ("!timeB!") do (
    set /a "hB=1%%A - 100"
    set /a "mB=1%%B - 100"
)

:: 4. Convert to Total Minutes
set /a "totalA=(hA * 60) + mA"
set /a "totalB=(hB * 60) + mB"

:: 5. Calculate Difference
set /a "diff=totalB - totalA"

:: Handle midnight crossing
if !diff! LSS 0 set /a "diff+=1440"

:: 6. Convert difference back to Hours:Minutes
set /a "diffH=diff / 60"
set /a "diffM=diff %% 60"

echo.
echo ==========================================
echo TIME A:      !timeA!
echo TIME B:      !timeB!
echo DIFFERENCE:  !diff! minutes (!diffH!h !diffM!m)
echo ==========================================
pause

Interactive Version

To accept user input instead of hardcoded values:

@echo off
setlocal enabledelayedexpansion

:: Prompt for input
set /p "timeA=Enter start time (HH:MM, 24-hour): "
set /p "timeB=Enter end time   (HH:MM, 24-hour): "

:: Parse Time A
for /f "tokens=1,2 delims=:" %%A in ("!timeA!") do (
    set /a "hA=1%%A - 100"
    set /a "mA=1%%B - 100"
)

:: Parse Time B
for /f "tokens=1,2 delims=:" %%A in ("!timeB!") do (
    set /a "hB=1%%A - 100"
    set /a "mB=1%%B - 100"
)

:: Validate ranges
if !hA! GTR 23 ( echo [ERROR] Start hour out of range. & pause & exit /b )
if !hB! GTR 23 ( echo [ERROR] End hour out of range. & pause & exit /b )
if !mA! GTR 59 ( echo [ERROR] Start minutes out of range. & pause & exit /b )
if !mB! GTR 59 ( echo [ERROR] End minutes out of range. & pause & exit /b )

:: Convert to Total Minutes
set /a "totalA=(hA * 60) + mA"
set /a "totalB=(hB * 60) + mB"

:: Calculate Difference (with midnight crossing support)
set /a "diff=totalB - totalA"
if !diff! LSS 0 set /a "diff+=1440"

:: Convert difference back to Hours:Minutes
set /a "diffH=diff / 60"
set /a "diffM=diff %% 60"

echo.
echo ==========================================
echo START:       !timeA!
echo END:         !timeB!
echo DIFFERENCE:  !diff! minutes (!diffH!h !diffM!m)
echo ==========================================
pause

Why Calculate Time Differences?

  1. Performance Benchmarking: Measuring how long a script (or a portion of it) took to execute.
  2. SLA Monitoring: Checking if a service responded within the 15-minute SLA window.
  3. Shift Management: Calculating the number of working hours between a clock-in and clock-out time.

Important Considerations

Conclusion

Calculating the time difference in minutes is a fundamental "metrics" capability for any system administration script. By converting human-readable timestamps into flat integer values, you enable effortless mathematical comparison. This technique is the backbone of performance monitoring, SLA compliance checking, and execution timing in any Windows command-line automation workflow.

Navigation