From a2fd0b2c349cbf49a24453d4cf925a5d3d99efb7 Mon Sep 17 00:00:00 2001 From: nathangray Date: Thu, 14 Jul 2016 11:30:04 -0600 Subject: [PATCH] Fix long date display got the wrong month for some combinations of date format and timezone offset direction. --- calendar/js/app.js | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/calendar/js/app.js b/calendar/js/app.js index 22866eb994..80268f2a7b 100644 --- a/calendar/js/app.js +++ b/calendar/js/app.js @@ -3069,6 +3069,8 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend( { first = new Date(first); } + var first_format = new Date(first.valueOf() + first.getTimezoneOffset() * 60 * 1000); + if(typeof last == 'string' && last) { last = new Date(last); @@ -3077,6 +3079,10 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend( { last = false; } + if(last) + { + var last_format = new Date(last.valueOf() + last.getTimezoneOffset() * 60 * 1000); + } if(!display_time) display_time = false; if(!display_day) display_day = false; @@ -3091,7 +3097,7 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend( if (display_day) { - range = jQuery.datepicker.formatDate('DD',first)+(datefmt[0] != 'd' ? ' ' : ', '); + range = jQuery.datepicker.formatDate('DD',first_format)+(datefmt[0] != 'd' ? ' ' : ', '); } for (var i = 0; i < 5; i += 2) { @@ -3099,11 +3105,11 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend( { case 'd': range += first.getUTCDate()+ (datefmt[1] == '.' ? '.' : ''); - if (last && (first.getUTCMonth() != last.getUTCMonth() || first.getFullYear() != last.getFullYear())) + if (last && (first.getUTCMonth() != last.getUTCMonth() || first.getUTCFullYear() != last.getUTCFullYear())) { if (!month_before_day) { - range += jQuery.datepicker.formatDate('MM',first); + range += jQuery.datepicker.formatDate('MM',first_format); } if (first.getFullYear() != last.getFullYear() && datefmt[0] != 'Y') { @@ -3111,7 +3117,7 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend( } if (display_time) { - range += ' '+jQuery.datepicker.formatDate(dateTimeFormat(timefmt),first); + range += ' '+jQuery.datepicker.formatDate(dateTimeFormat(timefmt),first_format); } if (!last) { @@ -3121,19 +3127,19 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend( if (first.getFullYear() != last.getFullYear() && datefmt[0] == 'Y') { - range += last.getFullYear() + ', '; + range += last.getUTCFullYear() + ', '; } if (month_before_day) { - range += jQuery.datepicker.formatDate('MM',last); + range += jQuery.datepicker.formatDate('MM',last_format); } } else { if (display_time) { - range += ' '+jQuery.datepicker.formatDate(dateTimeFormat(timefmt),last); + range += ' '+jQuery.datepicker.formatDate(dateTimeFormat(timefmt),last_format); } if(last) { @@ -3147,23 +3153,23 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend( break; case 'm': case 'M': - range += ' '+jQuery.datepicker.formatDate('MM',month_before_day ? first : last) + ' '; + range += ' '+jQuery.datepicker.formatDate('MM',month_before_day ? first_format : last_format) + ' '; break; case 'Y': if (datefmt[0] != 'm') { - range += ' ' + (datefmt[0] == 'Y' ? first.getFullYear()+(datefmt[2] == 'd' ? ', ' : ' ') : last.getFullYear()+' '); + range += ' ' + (datefmt[0] == 'Y' ? first.getUTCFullYear()+(datefmt[2] == 'd' ? ', ' : ' ') : last.getUTCFullYear()+' '); } break; } } if (display_time && last) { - range += ' '+jQuery.datepicker.formatDate(dateTimeFormat(timefmt),last); + range += ' '+jQuery.datepicker.formatDate(dateTimeFormat(timefmt),last_format); } if (datefmt[4] == 'Y' && datefmt[0] == 'm') { - range += ', ' + last.getFullYear(); + range += ', ' + last.getUTCFullYear(); } return range; },