Military per Diem Rates Calculator

Military Per Diem Rates Calculator body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; color: #333; max-width: 1200px; margin: 0 auto; padding: 20px; background-color: #f5f7fa; } .calculator-container { background: #ffffff; padding: 30px; border-radius: 12px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); margin-bottom: 40px; border-top: 5px solid #2c3e50; } .calculator-title { text-align: center; color: #2c3e50; margin-bottom: 25px; font-size: 24px; font-weight: 700; } .input-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 20px; } @media (max-width: 768px) { .input-grid { grid-template-columns: 1fr; } } .input-group { margin-bottom: 15px; } .input-group label { display: block; margin-bottom: 8px; font-weight: 600; color: #4a5568; } .input-group input[type="number"] { width: 100%; padding: 12px; border: 2px solid #e2e8f0; border-radius: 8px; font-size: 16px; transition: border-color 0.2s; box-sizing: border-box; } .input-group input[type="number"]:focus { border-color: #2c3e50; outline: none; } .checkbox-group { display: flex; align-items: center; margin-top: 10px; } .checkbox-group input { margin-right: 10px; width: 20px; height: 20px; } .calc-btn { width: 100%; background-color: #2c3e50; color: white; padding: 15px; border: none; border-radius: 8px; font-size: 18px; font-weight: bold; cursor: pointer; transition: background-color 0.2s; margin-top: 10px; } .calc-btn:hover { background-color: #1a252f; } .results-section { margin-top: 30px; background-color: #f8fafc; padding: 20px; border-radius: 8px; border: 1px solid #e2e8f0; display: none; } .result-row { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid #e2e8f0; } .result-row:last-child { border-bottom: none; font-weight: bold; font-size: 1.2em; color: #2c3e50; margin-top: 10px; padding-top: 15px; border-top: 2px solid #cbd5e0; } .content-section { background: white; padding: 40px; border-radius: 12px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); } h2 { color: #2c3e50; border-bottom: 2px solid #e2e8f0; padding-bottom: 10px; margin-top: 30px; } h3 { color: #4a5568; margin-top: 25px; } p { margin-bottom: 15px; color: #4a5568; } ul { margin-bottom: 20px; padding-left: 20px; } li { margin-bottom: 8px; color: #4a5568; } .help-text { font-size: 12px; color: #718096; margin-top: 5px; }
Military Per Diem Estimator
Max lodging allowance for the location.
Meals & Incidental Expenses rate.
Travel days usually receive only 75% of M&IE.
Total Lodging Allowance (Max): $0.00
Total M&IE Allowance: $0.00
Total Estimated Per Diem: $0.00

Understanding Military Per Diem Rates

Military per diem is a daily allowance given to service members and DoD civilians to cover living expenses when traveling on official business (TDY/TAD). It is designed to reimburse you for lodging, meals, and incidental expenses (M&IE) without requiring you to pay out of pocket, provided you stay within the authorized limits.

The total per diem rate is composed of two primary parts:

  • Lodging: Covers the cost of hotel or other accommodations. This is reimbursed based on actual expenses up to a maximum cap determined by the location.
  • M&IE (Meals & Incidental Expenses): Covers breakfast, lunch, dinner, and small incidental fees (like tips for baggage handlers). Unlike lodging, M&IE is paid at a flat rate regardless of how much you actually spend on food.

How to Use This Calculator

Because per diem rates vary significantly by ZIP code and season (rates for Virginia Beach in July are different than in January), this calculator requires you to input the specific rates for your TDY location. You can find these rates on the official Defense Travel Management Office (DTMO) or GSA websites.

  1. Find your Rates: Lookup the Lodging and M&IE rates for your destination.
  2. Enter Lodging Rate: Input the maximum daily lodging amount.
  3. Enter M&IE Rate: Input the full daily meal rate.
  4. Enter Duration: Input the total number of days on your orders.
  5. 75% Rule: Leave checked if this is a standard TDY where you are traveling to and from the location on the first and last days.

The 75% Rule for Travel Days

According to the Joint Travel Regulations (JTR), travelers are typically authorized 75% of the full M&IE rate on the day of departure and the day of return, regardless of what time the travel occurs. For any full days spent at the TDY location between travel days, the traveler receives 100% of the M&IE rate.

CONUS vs. OCONUS

CONUS (Continental United States) rates are set by the GSA. OCONUS (Outside Continental United States) rates, which include Alaska, Hawaii, and US Territories, are set by the Department of Defense. While the administration differs, the calculation logic regarding the 75% rule generally remains consistent for standard temporary duty assignments.

Frequently Asked Questions

Do I get to keep the extra money if I don't spend it all?

For Lodging: No. You are reimbursed only for your actual lodging costs up to the cap. If the cap is $100 and you spend $80, you get $80. If you spend $120, you get $100 (unless actual expense authorization was approved).

For M&IE: Yes. The meal allowance is a flat rate. If the daily M&IE is $60 and you only spend $20 on food, you keep the remaining $40.

What if government meals are provided?

If the government provides meals (for example, if you are staying on a base with a chow hall and are directed to eat there), your M&IE rate will be significantly reduced to the "Government Meal Rate" (GMR), which is lower than the full commercial rate.

Are receipts required?

Generally, receipts are required for all lodging expenses regardless of cost, and for any other single expense over $75. Receipts are typically not required for food expenses since M&IE is a flat allowance.

function calculatePerDiem() { // 1. Get Input Values var lodgingRate = document.getElementById('dailyLodging').value; var mieRate = document.getElementById('dailyMie').value; var days = document.getElementById('tripDays').value; var apply75 = document.getElementById('apply75Rule').checked; // 2. Validate Inputs if (lodgingRate === "" || mieRate === "" || days === "") { alert("Please fill in all fields (Lodging, M&IE, and Days)."); return; } lodgingRate = parseFloat(lodgingRate); mieRate = parseFloat(mieRate); days = parseInt(days); if (days < 1) { alert("Trip duration must be at least 1 day."); return; } if (lodgingRate < 0 || mieRate 1, lodging nights = days – 1? // Actually, normally '5 days' TDY implies 4 nights lodging. // However, users often count 'days' loosely. // Let's assume Days = Calendar Days engaged. // Lodging Nights = Days – 1 (You don't sleep in a hotel after the last day's travel usually). var lodgingNights = days > 1 ? days – 1 : 0; // Edge case: Sometimes a 1 day TDY involves an overnight. // To keep it simple and flexible, we will calculate Lodging based on Nights. // But the input asks for "Trip Duration (Days)". // Standard JTR: Travel Day 1 -> Day X. Nights = Days – 1. totalLodging = lodgingRate * lodgingNights; // 5. Calculate M&IE if (days === 1) { // If the trip is less than 12 hours, usually no M&IE. // If > 12 hours but same day, usually 75%. // We will assume 75% if the box is checked, 100% if not. totalMie = apply75 ? (mieRate * 0.75) : mieRate; } else { // Multi-day trip if (apply75) { // First Day: 75% // Last Day: 75% // Middle Days: 100% var firstLastMie = (mieRate * 0.75) * 2; var middleDays = days – 2; var middleMie = middleDays * mieRate; totalMie = firstLastMie + middleMie; } else { // Flat rate every day totalMie = mieRate * days; } } var totalAllowance = totalLodging + totalMie; // 6. Display Results document.getElementById('resLodging').innerText = "$" + totalLodging.toFixed(2); // Add note about nights if > 0 if(lodgingNights > 0) { document.getElementById('resLodging').innerText += " (" + lodgingNights + " nights)"; } document.getElementById('resMie').innerText = "$" + totalMie.toFixed(2); document.getElementById('resTotal').innerText = "$" + totalAllowance.toFixed(2); // Show results container document.getElementById('results').style.display = "block"; }

Leave a Comment