From 11b90c12931724b8cf77221074cc0629103d84a9 Mon Sep 17 00:00:00 2001 From: MichaelBuen Date: Tue, 25 Apr 2017 22:43:31 +0800 Subject: [PATCH 1/2] Update date.js --- src/date.js | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/src/date.js b/src/date.js index f70d2a8..f0aef9b 100644 --- a/src/date.js +++ b/src/date.js @@ -2,34 +2,40 @@ 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) { + reverse = reverse ? -1 : 1; + var dateTimezoneOffset = date.getTimezoneOffset(); + var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset); + return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset)); +} + 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; - } + } + + + return { + stringToDate: stringToDate, + dateToString: dateToString, + }; - 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 +111,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 +119,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 +185,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); }; } From cdc25f8acf66eaf28d107981f696024ca9cb0c7c Mon Sep 17 00:00:00 2001 From: MichaelBuen Date: Tue, 25 Apr 2017 22:53:53 +0800 Subject: [PATCH 2/2] Update date.js --- src/date.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/date.js b/src/date.js index f0aef9b..df8efbf 100644 --- a/src/date.js +++ b/src/date.js @@ -15,20 +15,20 @@ function convertTimezoneToLocal(date, timezone, reverse) { 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) { - - //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; - } - + return { stringToDate: stringToDate,