This hours calculator for payroll simplifies the process of tracking employee time. Whether you are managing a small business or tracking your own freelance hours, accurate time calculation is essential for fair compensation and legal compliance.
Calculation Steps:
Time In & Out: Select the exact time the work shift started and ended. This tool supports 24-hour calculations, including shifts that cross over midnight.
Break Deduction: Enter the total number of unpaid break minutes (e.g., 30 for a lunch break).
Hourly Rate: (Optional) Enter the dollar amount paid per hour to see the total gross earnings for the shift.
Converting Minutes to Decimal Hours
Payroll systems typically require decimal hours. To calculate this manually, divide the total minutes by 60. For example, 7 hours and 45 minutes becomes 7.75 hours (45 / 60 = 0.75).
Minutes
Decimal
Minutes
Decimal
15 min
0.25
45 min
0.75
30 min
0.50
60 min
1.00
function calculatePayroll() {
var timeIn = document.getElementById("timeIn").value;
var timeOut = document.getElementById("timeOut").value;
var breakMin = parseFloat(document.getElementById("breakMinutes").value) || 0;
var rate = parseFloat(document.getElementById("hourlyRate").value) || 0;
if (!timeIn || !timeOut) {
alert("Please enter both Time In and Time Out values.");
return;
}
var startParts = timeIn.split(":");
var endParts = timeOut.split(":");
var startTotalMinutes = (parseInt(startParts[0]) * 60) + parseInt(startParts[1]);
var endTotalMinutes = (parseInt(endParts[0]) * 60) + parseInt(endParts[1]);
// Handle night shifts (crossing midnight)
if (endTotalMinutes < startTotalMinutes) {
endTotalMinutes += 1440; // Add 24 hours in minutes
}
var totalMinutesWorked = endTotalMinutes – startTotalMinutes – breakMin;
if (totalMinutesWorked < 0) {
alert("Total work time cannot be negative. Please check your break duration.");
return;
}
var hours = Math.floor(totalMinutesWorked / 60);
var minutes = totalMinutesWorked % 60;
var decimalHours = totalMinutesWorked / 60;
var grossPay = decimalHours * rate;
// Display results
document.getElementById("displayHoursMinutes").innerText = hours + "h " + minutes + "m";
document.getElementById("displayDecimalHours").innerText = decimalHours.toFixed(2);
document.getElementById("displayTotalMinutes").innerText = totalMinutesWorked;
document.getElementById("displayGrossPay").innerText = "$" + grossPay.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("payrollResult").style.display = "block";
}