Understanding how overtime (OT) is calculated in Malaysia is crucial for both employees and employers to ensure compliance with the Employment Act 1955. While the calculation might seem complex, it is based on a standardized formula using your "Ordinary Rate of Pay" (ORP).
The Base Formula
Before calculating the overtime amount, you must determine your Hourly Rate of Pay (HRP). According to Malaysian labor law, the fixed denominator for monthly-rated employees is 26 days, regardless of whether the month has 28, 30, or 31 days.
Once you have your hourly rate, the Employment Act dictates specific multipliers depending on when the overtime work was performed:
Type of Day
Condition
Rate Multiplier
Normal Work Day
Work done in excess of normal hours (e.g., after 5 PM or 6 PM)
1.5 x HRP
Rest Day
Work done in excess of normal hours on a rest day (usually Sunday)
2.0 x HRP
Public Holiday
Work done in excess of normal hours on a gazetted Public Holiday
3.0 x HRP
Example Calculation
Let's say Ali earns a basic salary of RM 2,600.
Daily Rate: RM 2,600 / 26 = RM 100
Hourly Rate: RM 100 / 8 = RM 12.50
If Ali works 2 hours of OT on a normal Tuesday:
Calculation: 2 hours x RM 12.50 x 1.5
Total OT Pay: RM 37.50
Who is Eligible for Overtime?
Following the amendments to the Employment Act effective January 1, 2023, the scope of employees covered has expanded. Generally, employees earning up to RM 4,000 per month are eligible for overtime payments. Manual laborers are covered regardless of salary level.
function calculateMyOT() {
// 1. Get Input Values
var salaryInput = document.getElementById('monthlySalary').value;
var normalInput = document.getElementById('normalHours').value;
var restInput = document.getElementById('restHours').value;
var publicInput = document.getElementById('publicHours').value;
// 2. Parse values to floats
var salary = parseFloat(salaryInput);
var normalHours = parseFloat(normalInput);
var restHours = parseFloat(restInput);
var publicHours = parseFloat(publicInput);
// 3. Validation
if (isNaN(salary) || salary < 0) {
alert("Please enter a valid monthly salary (RM).");
return;
}
// Set defaults to 0 if inputs are empty
if (isNaN(normalHours)) normalHours = 0;
if (isNaN(restHours)) restHours = 0;
if (isNaN(publicHours)) publicHours = 0;
// 4. Constants per Malaysia Employment Act
var daysInMonthDenominator = 26; // Fixed by law for ORP
var standardWorkHours = 8; // Standard daily hours
// 5. Calculate Rates
var dailyRate = salary / daysInMonthDenominator;
var hourlyRate = dailyRate / standardWorkHours;
// 6. Calculate Specific OT Pay
var payNormal = normalHours * hourlyRate * 1.5;
var payRest = restHours * hourlyRate * 2.0;
var payPublic = publicHours * hourlyRate * 3.0;
var totalOT = payNormal + payRest + payPublic;
// 7. Format Logic (Currency)
function formatRM(val) {
return "RM " + val.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}
// 8. Update DOM
document.getElementById('resDailyRate').innerText = formatRM(dailyRate);
document.getElementById('resHourlyRate').innerText = formatRM(hourlyRate);
document.getElementById('resNormalPay').innerText = formatRM(payNormal);
document.getElementById('resRestPay').innerText = formatRM(payRest);
document.getElementById('resPublicPay').innerText = formatRM(payPublic);
document.getElementById('resTotal').innerText = formatRM(totalOT);
// Show results container
document.getElementById('otResults').style.display = 'block';
}