REBOL [ Title: "Age" Date: 5-Jul-2002/9:20 Name: Age Version: 2.0.0 File: %Age.r Author: "Andrew Martin" Needs: [%Days-Per-Month.r] Purpose: "Calulates Age in Years, Months & Days." Email: Al.Bri@xtra.co.nz Web: http://valley.150m.com Category: [math util 5] Acknowledgements: [ "Ladislav Mecir" ] ] Age: function [ "Calulates Age in Years, Months & Days." Birth [date!] Date [date!] ] [Years Months Days New] [ if Date < Birth [ return Age Date Birth ] Days: Date/day - Birth/day if negative? Days [ Months: Birth/month + 1 Years: Birth/year if Months > 12 [ Months: 1 Years: Years + 1 ] New: to date! reduce [1 Months Years] Days: New - Birth + Date/day - 1 Birth: New ] Months: Date/month - Birth/month Years: Date/year - Birth/year if negative? Months [ Months: Months + 12 Years: Years - 1 ] make object! compose [Years: (Years) Months: (Months) Days: (Days)] ] comment [ ; My faulty 'Age function. Gives a negative day for: age 30/01/1900 01/03/1900 [Years: 0 Months: 1 Days: 2] Age: function [ "Calulates Age in Years, Months & Days." Date1 [date!] Date2 [date!] ] [Difference Years Months Days] [ if Date1 < Date2 [ return Age Date2 Date1 ] Difference: Date1 - Date2 Years: Date1/year Months: Date1/month Days: subtract Date1/day Date2/day if negative? Days [ Months: Months - 1 Days: Days + pick system/locale/days-per-month either 1 <= Months [ Months ] [ length? system/locale/days-per-month ] if all [ 2 = Months ; Previous month = February? leap-year? Date1 ] [ Days: Days + 1 ] ] Months: Months - Date2/month if negative? Months [ Years: Years - 1 Months: Months + 12 ] Years: Years - Date2/year make object! compose [Years: (Years) Months: (Months) Days: (Days)] ] ]