.ng-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: 1px solid #ddd;
border-radius: 8px;
background-color: #f9f9f9;
color: #333;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.ng-calc-header {
text-align: center;
margin-bottom: 25px;
}
.ng-calc-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 20px;
}
.ng-input-group {
display: flex;
flex-direction: column;
}
.ng-input-group label {
font-weight: 600;
margin-bottom: 8px;
font-size: 14px;
}
.ng-input-group select, .ng-input-group input {
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
}
.ng-calc-btn {
width: 100%;
background-color: #004b23;
color: white;
padding: 15px;
border: none;
border-radius: 4px;
font-size: 18px;
font-weight: bold;
cursor: pointer;
transition: background-color 0.3s;
}
.ng-calc-btn:hover {
background-color: #003d1c;
}
.ng-result-box {
margin-top: 25px;
padding: 20px;
background-color: #fff;
border: 2px solid #004b23;
border-radius: 6px;
text-align: center;
}
.ng-result-value {
font-size: 32px;
font-weight: 800;
color: #004b23;
display: block;
margin-top: 10px;
}
.ng-article {
margin-top: 40px;
line-height: 1.6;
}
.ng-article h2 {
color: #004b23;
border-bottom: 2px solid #004b23;
padding-bottom: 5px;
}
.ng-article h3 {
margin-top: 20px;
}
@media (max-width: 600px) {
.ng-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 (Warrant Officer 1)
W-2 (Chief Warrant Officer 2)
O-1 (Second Lieutenant)
O-2 (First Lieutenant)
O-3 (Captain)
O-4 (Major)
Years of Service
Under 2 years
2 years
3 years
4 years
6 years
8 years
10 years
12 years
14 years
16 years
18 years
20+ years
Drill Periods (Standard weekend is 4)
Estimated Tax Withholding (%)
Calculate Drill Pay
Estimated Gross Drill Pay:
$0.00
Estimated Net Pay (After Taxes):
$0.00
How National Guard Pay is Calculated
National Guard compensation for "weekend drill" is technically known as Inactive Duty Training (IDT) pay. Unlike active-duty soldiers who receive a monthly salary, Guard members are paid per "drill period."
What is a Drill Period?
A typical drill weekend consists of four drill periods . One drill period is a four-hour block of training. Therefore, a standard Saturday and Sunday equals four periods. For each single drill period, you earn 1/30th of the monthly basic pay for your rank and years of service.
Factors That Influence Your Pay
Pay Grade: Your rank (e.g., E-4, O-3) is the primary driver of your base salary.
Years of Service: Military pay scales increase at specific longevity milestones (usually every 2 years).
Type of Duty: This calculator focuses on IDT (Drill). If you are on Annual Training (AT) or Active Duty for Operational Support (ADOS), you transition to the full active-duty pay scale including BAH (Housing) and BAS (Subsistence).
2024 Drill Pay Example
If an E-4 with 4 years of service has a monthly base pay of approximately $3,066.30, their pay for one drill period would be $102.21 ($3,066.30 / 30). For a full 4-period weekend, the gross pay would be approximately $408.84 before taxes and insurance deductions.
function calculateNGPay() {
// Simplified 2024 Basic Monthly Pay Matrix (Representative samples)
var payTable = {
"E1": { 0: 2017, 2: 2017, 3: 2017, 4: 2017, 6: 2017, 8: 2017, 10: 2017, 12: 2017, 14: 2017, 16: 2017, 18: 2017, 20: 2017 },
"E2": { 0: 2261, 2: 2261, 3: 2261, 4: 2261, 6: 2261, 8: 2261, 10: 2261, 12: 2261, 14: 2261, 16: 2261, 18: 2261, 20: 2261 },
"E3": { 0: 2377, 2: 2526, 3: 2684, 4: 2684, 6: 2684, 8: 2684, 10: 2684, 12: 2684, 14: 2684, 16: 2684, 18: 2684, 20: 2684 },
"E4": { 0: 2631, 2: 2766, 3: 2919, 4: 3066, 6: 3197, 8: 3197, 10: 3197, 12: 3197, 14: 3197, 16: 3197, 18: 3197, 20: 3197 },
"E5": { 0: 2872, 2: 3066, 3: 3216, 4: 3370, 6: 3608, 8: 3857, 10: 4059, 12: 4085, 14: 4085, 16: 4085, 18: 4085, 20: 4085 },
"E6": { 0: 3135, 2: 3450, 3: 3603, 4: 3751, 6: 3907, 8: 4252, 10: 4386, 12: 4647, 14: 4729, 16: 4782, 18: 4845, 20: 4845 },
"E7": { 0: 3624, 2: 3955, 3: 4106, 4: 4310, 6: 4467, 8: 4741, 10: 4894, 12: 5168, 14: 5391, 16: 5521, 18: 5714, 20: 5815 },
"E8": { 0: 5013, 2: 5236, 3: 5371, 4: 5523, 6: 5707, 8: 5961, 10: 6133, 12: 6303, 14: 6496, 16: 6701, 18: 7082, 20: 7268 },
"E9": { 0: 6116, 2: 6251, 3: 6408, 4: 6598, 6: 6817, 8: 7068, 10: 7322, 12: 7578, 14: 7872, 16: 8213, 18: 8555, 20: 9029 },
"W1": { 0: 3739, 2: 4141, 3: 4248, 4: 4492, 6: 4774, 8: 5054, 10: 5275, 12: 5537, 14: 5845, 16: 6092, 18: 6304, 20: 6511 },
"W2": { 0: 4260, 2: 4668, 3: 4791, 4: 4872, 6: 5143, 8: 5571, 10: 5782, 12: 5991, 14: 6245, 16: 6451, 18: 6632, 20: 6853 },
"O1": { 0: 3826, 2: 3982, 3: 4814, 4: 4814, 6: 4814, 8: 4814, 10: 4814, 12: 4814, 14: 4814, 16: 4814, 18: 4814, 20: 4814 },
"O2": { 0: 4408, 2: 5021, 3: 5797, 4: 5992, 6: 6116, 8: 6116, 10: 6116, 12: 6116, 14: 6116, 16: 6116, 18: 6116, 20: 6116 },
"O3": { 0: 5102, 2: 5782, 3: 6169, 4: 6725, 6: 7047, 8: 7401, 10: 7631, 12: 8007, 14: 8206, 16: 8206, 18: 8206, 20: 8206 },
"O4": { 0: 5803, 2: 6418, 3: 6846, 4: 6940, 6: 7338, 8: 7762, 10: 8286, 12: 8699, 14: 9002, 16: 9193, 18: 9283, 20: 9283 }
};
var grade = document.getElementById("payGrade").value;
var years = document.getElementById("yearsOfService").value;
var drills = parseFloat(document.getElementById("drillPeriods").value);
var tax = parseFloat(document.getElementById("taxRate").value);
if (isNaN(drills) || drills < 0) {
alert("Please enter a valid number of drill periods.");
return;
}
// Get basic monthly pay from table
var monthlyBase = payTable[grade][years];
// Calculation: (Monthly Pay / 30) * Number of Drills
var grossDrillPay = (monthlyBase / 30) * drills;
// Net Pay calculation
var netDrillPay = grossDrillPay * (1 – (tax / 100));
// Display results
document.getElementById("grossPayDisplay").innerText = "$" + grossDrillPay.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("netPayDisplay").innerText = "$" + netDrillPay.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resultArea").style.display = "block";
}