Accurately track and calculate your total work hours for up to 7 days or shifts. This tool helps you account for start times, end times, and any breaks taken, providing a clear summary of your workweek.
Day/Shift
Start Time (HH:MM AM/PM or 24-hour)
End Time (HH:MM AM/PM or 24-hour)
Break (Minutes)
Daily Hours
Day 1
Day 2
Day 3
Day 4
Day 5
Day 6
Day 7
How to Use This Time Sheet Calculator
This calculator simplifies the process of tracking your work hours over a period of up to seven days or shifts. Follow these steps to get your total hours:
Enter Start Time: For each day or shift, input the time you began working. Use either a 12-hour format (e.g., 09:00 AM, 05:30 PM) or a 24-hour format (e.g., 09:00, 17:30).
Enter End Time: Similarly, input the time you finished working for each day or shift. Ensure the format matches your start time entry. The calculator can handle overnight shifts (e.g., starting at 10:00 PM and ending at 06:00 AM the next day).
Enter Break (Minutes): Input the total duration of your unpaid breaks for that specific day or shift in minutes (e.g., 30 for a 30-minute lunch break). If you had no breaks, enter 0.
Calculate: After filling in the relevant fields for your workdays, click the "Calculate Total Hours" button.
View Results: The calculator will display the net working hours for each individual day/shift and provide a grand total of all your calculated hours.
Understanding Your Work Hours
Accurate time tracking is crucial for various reasons, whether you're an employee, a freelancer, or a business owner. Knowing your precise work hours helps with:
Payroll Accuracy: Ensures you are paid correctly for every hour worked, including any overtime.
Project Management: Helps in estimating project timelines, allocating resources, and billing clients accurately.
Compliance: Essential for adhering to labor laws regarding working hours, breaks, and overtime regulations.
Productivity Analysis: Provides insights into how much time is spent on tasks, helping to identify areas for efficiency improvement.
Work-Life Balance: Allows you to monitor your working patterns and ensure you're not overworking, contributing to better well-being.
This calculator is designed to be straightforward, helping you quickly get the information you need without complex setups.
Example Calculation
Let's walk through an example to see how the calculator works:
Scenario: A worker's time sheet for a week.
Day 1: Start 09:00 AM, End 05:00 PM, Break 30 minutes
Day 2: Start 09:30 AM, End 06:00 PM, Break 60 minutes
Day 3: Start 10:00 AM, End 02:00 PM, Break 0 minutes
Day 4: Start 08:00 AM, End 04:00 PM, Break 45 minutes
Day 5: Start 06:00 PM, End 02:00 AM (next day), Break 30 minutes
Day 6 & 7: Off (empty entries)
Using the calculator with these inputs would yield the following daily and total hours:
Day 1: 7h 30m
Day 2: 7h 30m
Day 3: 4h 0m
Day 4: 7h 15m
Day 5: 7h 30m
Day 6: 0h 0m
Day 7: 0h 0m
Total Hours: 33h 45m
function parseTime(timeStr) {
timeStr = timeStr.trim();
if (timeStr === "") {
return NaN; // Explicitly return NaN for empty strings, to be handled in main function
}
var totalMinutes = 0;
// Try to parse with AM/PM (e.g., 09:00 AM, 5:30 PM)
var ampmMatch = timeStr.match(/(\d{1,2}):(\d{2})\s*(AM|PM)/i);
if (ampmMatch) {
var hours = parseInt(ampmMatch[1], 10);
var minutes = parseInt(ampmMatch[2], 10);
var ampm = ampmMatch[3].toUpperCase();
if (hours === 12 && ampm === 'AM') {
hours = 0; // 12 AM (midnight) is 00:00
} else if (hours === 12 && ampm === 'PM') {
// 12 PM (noon) is 12:00
} else if (ampm === 'PM') {
hours += 12;
}
if (hours >= 0 && hours = 0 && minutes = 0 && hours = 0 && minutes < 60) {
totalMinutes = hours * 60 + minutes;
return totalMinutes;
}
}
return NaN; // Invalid time format
}
function calculateTotalHours() {
var totalOverallMinutes = 0;
var numRows = 7; // Fixed number of rows for 7 days/shifts
var hasInvalidEntry = false;
for (var i = 1; i <= numRows; i++) {
var startTimeId = "startTime_" + i;
var endTimeId = "endTime_" + i;
var breakMinutesId = "breakMinutes_" + i;
var dailyHoursId = "dailyHours_" + i;
var startTimeStr = document.getElementById(startTimeId).value;
var endTimeStr = document.getElementById(endTimeId).value;
var breakMinutesInput = document.getElementById(breakMinutesId).value;
var startMinutes = parseTime(startTimeStr);
var endMinutes = parseTime(endTimeStr);
var breakMinutes = parseFloat(breakMinutesInput) || 0; // Default to 0 if empty or invalid
var dailyNetMinutes = 0;
var dailyHoursDisplay = "";
// Check for completely empty row (no start time, no end time)
if (startTimeStr === "" && endTimeStr === "") {
dailyNetMinutes = 0;
dailyHoursDisplay = "0h 0m";
}
// Check for partially filled or invalid time formats
else if (isNaN(startMinutes) || isNaN(endMinutes)) {
dailyHoursDisplay = "Invalid Time";
hasInvalidEntry = true;
}
// Valid times, proceed with calculation
else {
// Handle overnight shifts (e.g., 10 PM to 6 AM)
if (endMinutes < startMinutes) {
endMinutes += 24 * 60; // Add 24 hours (1440 minutes) for the next day
}
var grossMinutes = endMinutes – startMinutes;
// Ensure break minutes are non-negative and don't exceed gross work minutes
if (breakMinutes grossMinutes) {
breakMinutes = grossMinutes; // Cannot have more break than work
}
dailyNetMinutes = grossMinutes – breakMinutes;
var dailyHours = Math.floor(dailyNetMinutes / 60);
var dailyRemainingMinutes = dailyNetMinutes % 60;
dailyHoursDisplay = dailyHours + "h " + dailyRemainingMinutes + "m";
}
document.getElementById(dailyHoursId).innerHTML = dailyHoursDisplay;
totalOverallMinutes += dailyNetMinutes;
}
var totalHours = Math.floor(totalOverallMinutes / 60);
var totalRemainingMinutes = totalOverallMinutes % 60;
var resultDiv = document.getElementById("result");
if (hasInvalidEntry) {
resultDiv.innerHTML = "Please correct invalid time entries.";
} else if (totalOverallMinutes < 0) {
// This case should ideally be caught by invalid time entries or capped breaks, but as a safeguard
resultDiv.innerHTML = "Total Hours: 0h 0m (Check your entries, total hours cannot be negative)";
} else {
resultDiv.innerHTML = "Total Hours: " + totalHours + "h " + totalRemainingMinutes + "m";
}
}
// Run calculation on page load to show initial daily hours for default values
window.onload = calculateTotalHours;