แก้ไขการคำนวนระยะเวลาครองตำแหน่ง
This commit is contained in:
parent
f1c546ba8f
commit
d093953fbe
3 changed files with 227 additions and 143 deletions
|
|
@ -1,18 +1,37 @@
|
|||
/**
|
||||
* คำนวณอายุงานจากจำนวนวันรวม
|
||||
* ใช้สูตรเดียวกับ Stored Procedure GetProfileSalaryPosition
|
||||
* @param totalDays จำนวนวันรวม
|
||||
* @returns { year, month, day } ปี เดือน วัน
|
||||
* Normalize a duration sum using calendar arithmetic
|
||||
* Converts excess days to months using average month length (30.4375 days)
|
||||
* and excess months to years. Matches the logic used in stored procedures.
|
||||
*
|
||||
* @param years Total years from sum
|
||||
* @param months Total months from sum
|
||||
* @param days Total days from sum
|
||||
* @returns Normalized { years, months, days }
|
||||
*/
|
||||
export function calculateTenure(totalDays: number) {
|
||||
// Match stored procedure formula:
|
||||
// days_diff / 365.2524 AS Years
|
||||
// (days_diff / 30.4375) % 12 AS Months
|
||||
// days_diff % 30.4375 AS Days
|
||||
export function normalizeDurationSumSimple(
|
||||
years: number,
|
||||
months: number,
|
||||
days: number,
|
||||
): { years: number; months: number; days: number } {
|
||||
const DAYS_PER_MONTH = 30.4375; // Average days per month in Gregorian calendar
|
||||
|
||||
const year = Math.floor(totalDays / 365.2524);
|
||||
const month = Math.floor((totalDays / 30.4375) % 12);
|
||||
const day = Math.floor(totalDays % 30.4375);
|
||||
let totalMonths = months;
|
||||
let totalDays = days;
|
||||
|
||||
return { year, month, day };
|
||||
// Convert excess days to months
|
||||
if (totalDays >= DAYS_PER_MONTH) {
|
||||
const additionalMonths = Math.floor(totalDays / DAYS_PER_MONTH);
|
||||
totalMonths += additionalMonths;
|
||||
totalDays = totalDays - additionalMonths * DAYS_PER_MONTH;
|
||||
}
|
||||
|
||||
// Convert excess months to years
|
||||
let totalYears = years;
|
||||
if (totalMonths >= 12) {
|
||||
const additionalYears = Math.floor(totalMonths / 12);
|
||||
totalYears += additionalYears;
|
||||
totalMonths = totalMonths % 12;
|
||||
}
|
||||
|
||||
return { years: totalYears, months: Math.floor(totalMonths), days: Math.floor(totalDays) };
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue