.army-calc-container {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
max-width: 800px;
margin: 20px auto;
padding: 25px;
border: 2px solid #4b5320;
border-radius: 8px;
background-color: #f9f9f9;
color: #333;
}
.army-calc-header {
text-align: center;
margin-bottom: 30px;
background-color: #4b5320;
color: #ffffff;
padding: 20px;
border-radius: 5px;
}
.army-calc-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 25px;
}
.army-input-group {
display: flex;
flex-direction: column;
}
.army-input-group label {
font-weight: bold;
margin-bottom: 8px;
color: #4b5320;
}
.army-input-group select, .army-input-group input {
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
}
.army-calc-btn {
width: 100%;
padding: 15px;
background-color: #4b5320;
color: white;
border: none;
border-radius: 5px;
font-size: 18px;
font-weight: bold;
cursor: pointer;
transition: background 0.3s;
}
.army-calc-btn:hover {
background-color: #353b16;
}
.army-result-box {
margin-top: 30px;
padding: 20px;
background-color: #e9eddb;
border-left: 5px solid #4b5320;
display: none;
}
.army-result-item {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
border-bottom: 1px solid #cbd4a2;
padding-bottom: 5px;
}
.army-total-row {
font-size: 22px;
font-weight: bold;
color: #4b5320;
margin-top: 15px;
}
.army-article {
margin-top: 40px;
line-height: 1.6;
}
.army-article h2 {
color: #4b5320;
border-bottom: 2px solid #4b5320;
padding-bottom: 10px;
}
@media (max-width: 600px) {
.army-calc-grid {
grid-template-columns: 1fr;
}
}
Pay Grade (Rank)
E-1 (Private)
E-2 (Private Second Class)
E-3 (Private First Class)
E-4 (Specialist/Corporal)
E-5 (Sergeant)
E-6 (Staff Sergeant)
E-7 (Sgt First Class)
E-8 (Master Sgt/First Sgt)
E-9 (Sgt Major)
W-1
W-2
W-3
W-4
W-5
O-1 (2nd Lieutenant)
O-2 (1st Lieutenant)
O-3 (Captain)
O-4 (Major)
O-5 (Lieutenant Colonel)
O-6 (Colonel)
Years of Service
2 or less
Over 2
Over 3
Over 4
Over 6
Over 8
Over 10
Over 12
Over 14
Over 16
Over 18
Over 20
Over 22
Over 24
Over 26
Monthly BAH (Housing Allowance)
Dependents Status
Single / No Dependents
With Dependents
CALCULATE ESTIMATED PAY
Monthly Basic Pay:
$0.00
Monthly BAS (Food):
$0.00
Monthly BAH (Housing):
$0.00
Total Monthly Gross:
$0.00
Estimated Annual Total:
$0.00
Understanding US Army Compensation
The United States Army uses a standardized pay scale that is primarily determined by two factors: your Pay Grade (Rank) and your Years of Service . However, base pay is only one component of a soldier's total compensation package.
1. Basic Pay
Basic pay is the core salary for every service member. It is taxable income and increases automatically as you promote in rank or reach service milestones (usually every 2 years). For example, an E-4 with 4 years of service earns significantly more than an E-4 with only 2 years of service.
2. Basic Allowance for Subsistence (BAS)
BAS is meant to offset the cost of a service member's meals. Unlike basic pay, BAS is generally non-taxable. As of 2024, the standard rates are:
Enlisted: Approximately $460.25 per month
Officers: Approximately $316.98 per month
3. Basic Allowance for Housing (BAH)
BAH is a non-taxable allowance provided to soldiers who do not live in government-provided housing. The amount varies based on:
Your geographic location (ZIP code).
Your pay grade.
Whether or not you have dependents.
Example Calculation
An E-5 (Sergeant) with 6 years of service stationed at Fort Cavazos, TX might have the following monthly breakdown:
Basic Pay: ~$3,650
BAS: ~$460
BAH (With Dependents): ~$1,800
Total Monthly Pay: ~$5,910
Note: This does not include Special Duty Assignment Pay (SDAP), Hazard Pay, or Overseas Cost of Living Allowances (COLA).
function calculateArmyPay() {
var grade = document.getElementById("payGrade").value;
var years = parseInt(document.getElementById("yearsOfService").value);
var bah = parseFloat(document.getElementById("bahRate").value) || 0;
var basicPay = 0;
var bas = 0;
// 2024 Basic Pay Table (Approximate simplified monthly rates)
var payTable = {
"E1": [2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017],
"E2": [2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259],
"E3": [2377, 2526, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684],
"E4": [2631, 2765, 2915, 3061, 3192, 3192, 3192, 3192, 3192, 3192, 3192],
"E5": [2872, 3065, 3215, 3367, 3603, 3855, 3855, 3855, 3855, 3855, 3855],
"E6": [3135, 3451, 3604, 3752, 3909, 4256, 4390, 4537, 4614, 4614, 4614],
"E7": [3624, 3955, 4108, 4313, 4471, 4731, 4885, 5163, 5320, 5450, 5600],
"E8": [0, 0, 0, 0, 4957, 5183, 5334, 5499, 5679, 6003, 6380],
"E9": [0, 0, 0, 0, 0, 0, 6051, 6216, 6423, 6790, 7350],
"W1": [3638, 4032, 4136, 4357, 4578, 4797, 5018, 5239, 5459, 5680, 5900],
"W2": [4144, 4539, 4659, 4780, 5049, 5319, 5588, 5857, 6127, 6300, 6500],
"W3": [4684, 4879, 5080, 5285, 5493, 5705, 5985, 6268, 6555, 6800, 7100],
"W4": [5132, 5483, 5716, 5946, 6176, 6411, 6725, 7035, 7352, 7600, 8000],
"W5": [0, 0, 0, 0, 0, 0, 0, 0, 8780, 9200, 9800],
"O1": [3826, 3982, 4814, 4814, 4814, 4814, 4814, 4814, 4814, 4814, 4814],
"O2": [4408, 5020, 5815, 6013, 6136, 6136, 6136, 6136, 6136, 6136, 6136],
"O3": [5101, 5782, 6174, 6731, 7054, 7397, 7619, 7995, 8196, 8196, 8196],
"O4": [5803, 6724, 7175, 7274, 7691, 8137, 8466, 8684, 8802, 8802, 8802],
"O5": [6723, 7573, 8100, 8240, 8565, 8758, 9187, 9611, 10000, 10300, 10600],
"O6": [8067, 8864, 9445, 9445, 9483, 9898, 10398, 10900, 11400, 12000, 12800]
};
// Determine column based on years of service
var colIdx = 0;
if (years >= 30) colIdx = 10;
else if (years >= 26) colIdx = 9;
else if (years >= 22) colIdx = 8;
else if (years >= 18) colIdx = 7;
else if (years >= 14) colIdx = 6;
else if (years >= 10) colIdx = 5;
else if (years >= 6) colIdx = 4;
else if (years >= 4) colIdx = 3;
else if (years >= 3) colIdx = 2;
else if (years >= 2) colIdx = 1;
else colIdx = 0;
basicPay = payTable[grade][colIdx];
// Check if rank is Enlisted (E), Warrant (W), or Officer (O) for BAS
if (grade.charAt(0) === 'E') {
bas = 460.25;
} else {
bas = 316.98;
}
var totalMonthly = basicPay + bas + bah;
var totalAnnual = totalMonthly * 12;
// Update UI
document.getElementById("resBasicPay").innerText = "$" + basicPay.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resBAS").innerText = "$" + bas.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resBAH").innerText = "$" + bah.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resTotalMonthly").innerText = "$" + totalMonthly.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resTotalAnnual").innerText = "$" + totalAnnual.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("armyResult").style.display = "block";
}