How to Calculate Overtime Rate in Malaysia

Malaysia Overtime Calculator .ot-calculator-container { max-width: 800px; margin: 0 auto; padding: 20px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; background-color: #f9fafb; border: 1px solid #e5e7eb; border-radius: 8px; } .ot-header { text-align: center; margin-bottom: 30px; } .ot-header h2 { color: #1f2937; margin: 0; font-size: 24px; } .ot-input-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 25px; } @media (max-width: 600px) { .ot-input-grid { grid-template-columns: 1fr; } } .ot-input-group { display: flex; flex-direction: column; } .ot-input-group label { font-size: 14px; font-weight: 600; color: #374151; margin-bottom: 8px; } .ot-input-group input { padding: 10px; border: 1px solid #d1d5db; border-radius: 6px; font-size: 16px; outline: none; } .ot-input-group input:focus { border-color: #2563eb; box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.2); } .ot-help-text { font-size: 12px; color: #6b7280; margin-top: 4px; } .ot-calc-btn { width: 100%; padding: 12px; background-color: #2563eb; color: white; border: none; border-radius: 6px; font-size: 16px; font-weight: 600; cursor: pointer; transition: background-color 0.2s; } .ot-calc-btn:hover { background-color: #1d4ed8; } .ot-results { margin-top: 30px; background-color: white; border: 1px solid #e5e7eb; border-radius: 8px; padding: 20px; display: none; } .ot-result-row { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid #f3f4f6; } .ot-result-row:last-child { border-bottom: none; font-weight: bold; font-size: 18px; color: #2563eb; margin-top: 10px; padding-top: 15px; border-top: 2px solid #e5e7eb; } .ot-badge { background-color: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 12px; font-size: 12px; margin-left: 5px; } /* Article Styles */ .ot-article { max-width: 800px; margin: 40px auto; line-height: 1.6; color: #333; } .ot-article h3 { color: #111827; margin-top: 30px; } .ot-article ul { background: #f0fdf4; padding: 20px 40px; border-radius: 8px; border: 1px solid #bbf7d0; } .ot-article table { width: 100%; border-collapse: collapse; margin: 20px 0; } .ot-article th, .ot-article td { border: 1px solid #e5e7eb; padding: 12px; text-align: left; } .ot-article th { background-color: #f9fafb; }

Malaysia Overtime (OT) Calculator

Based on Employment Act 1955 Formulas

Basic pay excluding allowances
Extra hours on weekdays
Usually Sundays
Gazetted holidays
Ordinary Rate of Pay (Daily)
Hourly Rate of Pay (HRP)
Normal Day OT Pay (1.5x)
Rest Day OT Pay (2.0x)
Public Holiday OT Pay (3.0x)
Total Overtime Payout

How to Calculate Overtime Rate in Malaysia

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.

Step 1: Calculate Daily Rate (ORP)
Monthly Salary / 26 = Daily Rate

Step 2: Calculate Hourly Rate (HRP)
Daily Rate / 8 hours = Hourly Rate

Overtime Multipliers

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'; }

Leave a Comment