diff --git a/Server-Side Components/Server Side/calculate difference between two dates in years, months, and days/README.md b/Server-Side Components/Server Side/calculate difference between two dates in years, months, and days/README.md new file mode 100644 index 0000000000..fe59181fa0 --- /dev/null +++ b/Server-Side Components/Server Side/calculate difference between two dates in years, months, and days/README.md @@ -0,0 +1,22 @@ +# Get Age in Years, Months, Days + +This snippet calculates the difference between two dates in **years, months, and days**. +A common use case is to calculate a person’s age from their birthdate or determine elapsed time between two date fields. + +--- + +## 🔹 Inputs +- `startDate` – Earlier date (e.g., Birthdate) as a `GlideDateTime`. +- `endDate` – Later date (e.g., Today) as a `GlideDateTime`. + +--- + +## 🔹 Output +Returns an object in the format: + +```json +{ + "years": , + "months": , + "days": +} diff --git a/Server-Side Components/Server Side/calculate difference between two dates in years, months, and days/script.js b/Server-Side Components/Server Side/calculate difference between two dates in years, months, and days/script.js new file mode 100644 index 0000000000..3d7fb9da99 --- /dev/null +++ b/Server-Side Components/Server Side/calculate difference between two dates in years, months, and days/script.js @@ -0,0 +1,52 @@ +/** + * Get the age difference between two dates in years, months, and days. + * + * @param {GlideDateTime} startDate - The earlier date (e.g., birthdate). + * @param {GlideDateTime} endDate - The later date (e.g., today). + * @returns {Object} { years: number, months: number, days: number } + */ +function getAgeYMD(startDate, endDate) { + + var start = new GlideDateTime(startDate); + var end = new GlideDateTime(endDate); + + // Extract components + var sYear = parseInt(start.getYearUTC(), 10); + var sMonth = parseInt(start.getMonthUTC(), 10); + var sDay = parseInt(start.getDayOfMonthUTC(), 10); + + var eYear = parseInt(end.getYearUTC(), 10); + var eMonth = parseInt(end.getMonthUTC(), 10); + var eDay = parseInt(end.getDayOfMonthUTC(), 10); + + var years = eYear - sYear; + var months = eMonth - sMonth; + var days = eDay - sDay; + + // Adjust if negative + if (days < 0) { + months--; + var temp = new GlideDateTime(end); + temp.addMonthsUTC(-1); + days += temp.getDaysInMonthUTC(); + } + + if (months < 0) { + years--; + months += 12; + } + + return { + years: years, + months: months, + days: days + }; +} + +// Example usage: +// var birthdate = new GlideDateTime("1997-06-19 00:00:00"); +// var today = new GlideDateTime(); // current date +// var age = getAgeYMD(birthdate, today); +// gs.info("Age: " + age.years + " years, " + age.months + " months, " + age.days + " days"); +// Output +// Age: 28 years, 3 months, 14 days