From 226469dd859afa35dbaf6f8e495708004dbc80cc Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 22 Jan 2026 18:12:52 +0700 Subject: [PATCH] fix:calculateDurationYmd --- src/stores/mixin.ts | 61 ++++++++++++--------------------------------- 1 file changed, 16 insertions(+), 45 deletions(-) diff --git a/src/stores/mixin.ts b/src/stores/mixin.ts index 421dbe6..41c7161 100644 --- a/src/stores/mixin.ts +++ b/src/stores/mixin.ts @@ -973,58 +973,29 @@ export const useCounterMixin = defineStore("mixin", () => { * @returns ผลการคำนวน ปี เดือน วัน ในรูปแบบ 1 ปี 10 เดือน 5 วัน */ function calculateDurationYmd(startDate: any, endDate: any) { - if (startDate && endDate) { - const start = new Date(startDate); - const end = new Date(endDate); + if (!startDate || !endDate) return ""; - //Get the Timestamp - const date1_time_stamp = start.getTime(); - const date2_time_stamp = end.getTime(); + let start = moment(startDate).startOf("day"); + let end = moment(endDate).startOf("day").add(1, "day"); - let calc; + // สลับค่าเพื่อให้ end มากกว่า start เสมอ + if (start > end) [start, end] = [end, start]; - //Check which timestamp is greater - if (date1_time_stamp > date2_time_stamp) { - calc = new Date(date1_time_stamp - date2_time_stamp); - } else { - calc = new Date(date2_time_stamp - date1_time_stamp); - } + const years = end.diff(start, "years"); + start.add(years, "years"); - //retrieve the date, month and year - const calcFormatTmp = - calc.getDate() + "-" + (calc.getMonth() + 1) + "-" + calc.getFullYear(); - //Convert to an array and store - const calcFormat = calcFormatTmp.split("-"); - //Subtract each member of our array from the default date - const days_passed = Number(Math.abs(Number(calcFormat[0]))); - const months_passed = Number(Math.abs(Number(calcFormat[1])) - 1); - const years_passed = Number(Math.abs(Number(calcFormat[2])) - 1970); + const months = end.diff(start, "months"); + start.add(months, "months"); - //Set up custom text - const yrsTxt = "ปี"; - const mnthsTxt = "เดือน"; - const daysTxt = "วัน"; + const days = end.diff(start, "days"); - //display result with custom text - const result = - (years_passed > 0 && (months_passed > 0 || days_passed > 0) - ? years_passed + " " + yrsTxt + ", " - : "") + - (years_passed > 0 && months_passed == 0 && days_passed == 0 - ? years_passed + " " + yrsTxt + " " - : "") + - (months_passed > 0 && days_passed > 0 - ? months_passed + " " + mnthsTxt + ", " - : "") + - (months_passed > 0 && days_passed == 0 - ? months_passed + " " + mnthsTxt + " " - : "") + - (days_passed > 0 ? days_passed + " " + daysTxt : ""); + // การแสดงผล + const result = []; + if (years > 0) result.push(`${years} ปี`); + if (months > 0) result.push(`${months} เดือน`); + if (days > 0) result.push(`${days} วัน`); - return result.trim(); - } - - return ""; + return result.length > 0 ? result.join(" ") : "0 วัน"; } function findOrgName(obj: any) {