diff --git a/headers/private/shared/DateTime.h b/headers/private/shared/DateTime.h index 4ff1421ecb..6abd560fba 100755 --- a/headers/private/shared/DateTime.h +++ b/headers/private/shared/DateTime.h @@ -50,8 +50,10 @@ class BDate { static BDate CurrentDate(time_type type); bool SetDate(int32 year, int32 month, int32 day); - + void AddDays(int32 days); + void AddYears(int32 years); + void AddMonths(int32 months); int32 Day() const; int32 Year() const; diff --git a/src/kits/shared/DateTime.cpp b/src/kits/shared/DateTime.cpp index 2a03d3d5d1..6a87f6202f 100755 --- a/src/kits/shared/DateTime.cpp +++ b/src/kits/shared/DateTime.cpp @@ -202,6 +202,47 @@ BDate::AddDays(int32 days) } +void +BDate::AddYears(int32 years) +{ + fYear += years; + fDay = min_c(fDay, DaysInMonth()); +} + + +void +BDate::AddMonths(int32 months) +{ + if (months == 0) + return; + + if (months > 0) { + while (months > 0) { + fYear++; + months -= 12; + } + + fMonth += months; + if (fMonth < 1) { + fYear--; + fMonth += 12; + } + } else { + while (months < 0) { + fYear--; + months += 12; + } + + fMonth += months; + if (fMonth > 12) { + fYear++; + fMonth -= 12; + } + } + fDay = min_c(fDay, DaysInMonth()); +} + + int32 BDate::Day() const {