calendar: Fix prev/next buttons to not skip months
When the current day does not exist in the next/prev month (like 31 Feb), the next/prev buttons end up skipping the month. Fix that by going to the last day of the month instead. https://bugzilla.gnome.org/show_bug.cgi?id=641067
This commit is contained in:
parent
d9e778f501
commit
8fea88879a
@ -488,23 +488,45 @@ Calendar.prototype = {
|
|||||||
|
|
||||||
_onPrevMonthButtonClicked: function() {
|
_onPrevMonthButtonClicked: function() {
|
||||||
let newDate = new Date(this._selectedDate);
|
let newDate = new Date(this._selectedDate);
|
||||||
if (newDate.getMonth() == 0) {
|
let oldMonth = newDate.getMonth();
|
||||||
|
if (oldMonth == 0) {
|
||||||
newDate.setMonth(11);
|
newDate.setMonth(11);
|
||||||
newDate.setFullYear(newDate.getFullYear() - 1);
|
newDate.setFullYear(newDate.getFullYear() - 1);
|
||||||
} else {
|
if (newDate.getMonth() != 11) {
|
||||||
newDate.setMonth(newDate.getMonth() - 1);
|
let day = 32 - new Date(newDate.getFullYear() - 1, 11, 32).getDate();
|
||||||
|
newDate = new Date(newDate.getFullYear() - 1, 11, day);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
newDate.setMonth(oldMonth - 1);
|
||||||
|
if (newDate.getMonth() != oldMonth - 1) {
|
||||||
|
let day = 32 - new Date(newDate.getFullYear(), oldMonth - 1, 32).getDate();
|
||||||
|
newDate = new Date(newDate.getFullYear(), oldMonth - 1, day);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.setDate(newDate);
|
this.setDate(newDate);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onNextMonthButtonClicked: function() {
|
_onNextMonthButtonClicked: function() {
|
||||||
let newDate = new Date(this._selectedDate);
|
let newDate = new Date(this._selectedDate);
|
||||||
if (newDate.getMonth() == 11) {
|
let oldMonth = newDate.getMonth();
|
||||||
|
if (oldMonth == 11) {
|
||||||
newDate.setMonth(0);
|
newDate.setMonth(0);
|
||||||
newDate.setFullYear(newDate.getFullYear() + 1);
|
newDate.setFullYear(newDate.getFullYear() + 1);
|
||||||
} else {
|
if (newDate.getMonth() != 0) {
|
||||||
newDate.setMonth(newDate.getMonth() + 1);
|
let day = 32 - new Date(newDate.getFullYear() + 1, 0, 32).getDate();
|
||||||
|
newDate = new Date(newDate.getFullYear() + 1, 0, day);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
newDate.setMonth(oldMonth + 1);
|
||||||
|
if (newDate.getMonth() != oldMonth + 1) {
|
||||||
|
let day = 32 - new Date(newDate.getFullYear(), oldMonth + 1, 32).getDate();
|
||||||
|
newDate = new Date(newDate.getFullYear(), oldMonth + 1, day);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.setDate(newDate);
|
this.setDate(newDate);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user