diff --git a/lib/modules/Calendar.pmod/Gregorian.pmod b/lib/modules/Calendar.pmod/Gregorian.pmod index 118edac67e12be9f14c0265e4868da03615e4f10..ebbe966cf89e5eaa7bc60b90d1a49ad72c2eb39b 100644 --- a/lib/modules/Calendar.pmod/Gregorian.pmod +++ b/lib/modules/Calendar.pmod/Gregorian.pmod @@ -124,12 +124,12 @@ class Year object next() { - return vYear(y); + return vYear(y+1); } object prev() { - return vYear(y); + return vYear(y-1); } object `+(int n) @@ -214,7 +214,7 @@ class Year if (n<0) return vMonth(y,13+n); else - return vMonth(y,n); + return vMonth(y,n||1); } array(mixed) months() @@ -225,7 +225,7 @@ class Year object week(int n) { if (n<0) - return vWeek(y,this->number_of_weeks+n+1); + return vWeek(y,this->number_of_weeks()+n+1); else return vWeek(y,n||1); } @@ -308,10 +308,17 @@ class Month int `==(object x) { return + objectp(x) && object_program(x)==object_program(this) && x->y==y && x->m==m; } + int `!=(object x) + { + write("foo\n"); + return !(this==x); + } + int `>(object x) { return @@ -516,7 +523,7 @@ class Week int yday() { return - ({-1,-2,-3,-4,5,6,7})[this->year()->julian_day(0)%7] + ({0,-1,-2,-3,3,2,1})[this->year()->julian_day(0)%7] +7*(w-1); } @@ -564,10 +571,10 @@ class Week if (n<0) n=8+n; else if (!n) n=1; n+=yday()-1; - if (n<0) return vYear(y-1)->day(n+1); - if (n+1>this->year()->number_of_days()) + if (n<0) return vYear(y-1)->day(n); + if (n>=this->year()->number_of_days()) return vYear(y+1)->day(n-this->year()->number_of_days()); - return vDay(y,n+1); + return vDay(y,n); } array(mixed) days() @@ -746,11 +753,11 @@ class Day { int n; object ye=this->year(); - n=(-({-1,-2,-3,-4,5,6,7})[this->year()->julian_day(0)%7]+d-1)/7+1; + n=(-({0,-1,-2,-3,3,2,1})[this->year()->julian_day(0)%7]+d)/7+1; if (n>ye->number_of_weeks()) - return vWeek(y+1,1); + return ye->next()->week(1); else if (n<=0) - return vWeek(y-1,ye->prev()->number_of_weeks()); + return ye->prev()->week(-1); return vWeek(y,n); } };