diff --git a/src/date.js b/src/date.js index f70d2a8..cc56d4e 100644 --- a/src/date.js +++ b/src/date.js @@ -2,34 +2,44 @@ import jQuery from 'jquery'; import angular from 'angular'; import _datePicker from 'jquery-ui/datepicker'; // sets up jQuery with the datepicker plugin +function addDateMinutes(date, minutes) { + date = new Date(date.getTime()); + date.setMinutes(date.getMinutes() + minutes); + return date; +} + +function convertTimezoneToLocal(date, timezone, reverse) { + if (!date) { + return date; + } + + reverse = reverse ? -1 : 1; + var dateTimezoneOffset = date.getTimezoneOffset(); + var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset); + return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset)); +} + +//https://github.com/angular/angular.js/blob/622c42169699ec07fc6daaa19fe6d224e5d2f70e/src/Angular.js#L1207 +function timezoneToOffset(timezone, fallback) { + timezone = timezone.replace(/:/g, ''); + var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000; + return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset; +} + export default angular.module('ui.date', []) .constant('uiDateConfig', {}) .constant('uiDateFormatConfig', '') .factory('uiDateConverter', ['uiDateFormatConfig', function(uiDateFormatConfig) { + + + + return { stringToDate: stringToDate, dateToString: dateToString, }; - //https://github.com/angular/angular.js/blob/622c42169699ec07fc6daaa19fe6d224e5d2f70e/src/Angular.js#L1207 - function timezoneToOffset(timezone, fallback) { - timezone = timezone.replace(/:/g, ''); - var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000; - return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset; - } - - function addDateMinutes(date, minutes) { - date = new Date(date.getTime()); - date.setMinutes(date.getMinutes() + minutes); - return date; - } - - function convertTimezoneToLocal(date, timezone, reverse) { - reverse = reverse ? -1 : 1; - var dateTimezoneOffset = date.getTimezoneOffset(); - var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset); - return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset)); - } + function doTZ(date,timezone,reverse) { return timezone ? convertTimezoneToLocal(date, timezone, reverse) : date; @@ -105,7 +115,7 @@ export default angular.module('ui.date', []) return; } - if (isDate) { + if (isDate && !timezone) { angular.forEach(keys, function(key) { preserve[key] = controller.$modelValue['get' + key](); }); @@ -113,7 +123,7 @@ export default angular.module('ui.date', []) var newViewValue = $element.datepicker('getDate'); - if (isDate) { + if (isDate && !timezone) { angular.forEach(keys, (key) => { newViewValue['set' + key](preserve[key]); }); @@ -179,6 +189,7 @@ export default angular.module('ui.date', []) if (angular.isDate(controller.$modelValue) === false && angular.isString(controller.$modelValue)) { controller.$modelValue = uiDateConverter.stringToDate(attrs.uiDateFormat, controller.$modelValue, timezone); } + controller.$modelValue = convertTimezoneToLocal(controller.$modelValue, timezone, true); $element.datepicker('setDate', controller.$modelValue); }; }