Semi-monthly payroll occurs twice per month, typically on the 1st and 15th or the 15th and the last day of the month. This results in exactly 24 pay periods per year. Calculating the daily rate for this schedule is crucial for prorating mid-period hires, terminations, or unpaid leave.
The Formula for Daily Rate
While semi-monthly employees receive a fixed salary per pay period, the "daily rate" is usually derived from the total annual compensation to ensure consistency across months with different numbers of days.
Step 1: Determine Annual Salary
Locate the gross annual salary before taxes and deductions.
Step 2: Determine Working Days
Standard business years usually contain 260 working days (52 weeks multiplied by 5 days). Some years may have 261 or 262 depending on leap years and weekends.
Step 3: The Calculation Daily Rate = Gross Annual Salary / Total Working Days Per Year
Semi-Monthly vs. Bi-Weekly: What's the Difference?
Feature
Semi-Monthly
Bi-Weekly
Paychecks per Year
24
26
Payment Frequency
Twice a month
Every two weeks
Consistency
Specific dates
Specific day of week
Example Calculation
If an employee earns $52,000 per year and works a standard 260-day year:
Daily Rate: $52,000 / 260 = $200.00 per day
Semi-Monthly Gross: $52,000 / 24 = $2,166.67 per check
Hourly Rate (8hr day): $200 / 8 = $25.00 per hour
Why Prorating Matters
When an employee starts on the 10th of a month on a semi-monthly schedule, HR must calculate the exact number of working days remaining in that pay cycle. By multiplying the calculated daily rate by the days worked, you ensure a precise and legally compliant first paycheck.
function calculatePayroll() {
var annualSalary = document.getElementById('annualSalary').value;
var workingDays = document.getElementById('workingDays').value;
var hoursPerDay = document.getElementById('hoursPerDay').value;
if (annualSalary > 0 && workingDays > 0) {
var annual = parseFloat(annualSalary);
var days = parseFloat(workingDays);
var hours = parseFloat(hoursPerDay);
// Daily Rate
var dailyRate = annual / days;
// Semi-Monthly Gross (24 periods)
var semiMonthly = annual / 24;
// Hourly Rate
var hourlyRate = dailyRate / hours;
// Monthly Gross
var monthly = annual / 12;
// Display results
document.getElementById('dailyRateDisplay').innerText = '$' + dailyRate.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('semiMonthlyDisplay').innerText = '$' + semiMonthly.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('hourlyRateDisplay').innerText = '$' + hourlyRate.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('monthlyDisplay').innerText = '$' + monthly.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('results').style.display = 'block';
} else {
alert("Please enter a valid salary and number of working days.");
}
}