@ui5/webcomponents-localization 0.0.0-1b568f22b → 0.0.0-1cc5f5e54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/.eslintignore +1 -0
  2. package/CHANGELOG.md +370 -0
  3. package/README.md +36 -6
  4. package/dist/Assets-static.d.ts +1 -0
  5. package/dist/Assets-static.js +3 -0
  6. package/dist/Assets-static.js.map +1 -0
  7. package/dist/Assets.d.ts +1 -0
  8. package/dist/Assets.js +1 -0
  9. package/dist/Assets.js.map +1 -0
  10. package/dist/DateFormat.d.ts +6 -0
  11. package/dist/DateFormat.js +6 -2
  12. package/dist/DateFormat.js.map +1 -0
  13. package/dist/LocaleData.d.ts +6 -0
  14. package/dist/LocaleData.js +6 -2
  15. package/dist/LocaleData.js.map +1 -0
  16. package/dist/dates/CalendarDate.d.ts +41 -0
  17. package/dist/dates/CalendarDate.js +170 -181
  18. package/dist/dates/CalendarDate.js.map +1 -0
  19. package/dist/dates/ExtremeDates.d.ts +5 -0
  20. package/dist/dates/ExtremeDates.js +29 -0
  21. package/dist/dates/ExtremeDates.js.map +1 -0
  22. package/dist/dates/UniversalDate.d.ts +46 -0
  23. package/dist/dates/UniversalDate.js +5 -0
  24. package/dist/dates/UniversalDate.js.map +1 -0
  25. package/dist/dates/calculateWeekNumber.d.ts +4 -0
  26. package/dist/dates/calculateWeekNumber.js +42 -48
  27. package/dist/dates/calculateWeekNumber.js.map +1 -0
  28. package/dist/dates/convertMonthNumbersToMonthNames.d.ts +16 -0
  29. package/dist/dates/convertMonthNumbersToMonthNames.js +30 -0
  30. package/dist/dates/convertMonthNumbersToMonthNames.js.map +1 -0
  31. package/dist/dates/getDaysInMonth.d.ts +3 -0
  32. package/dist/dates/getDaysInMonth.js +10 -0
  33. package/dist/dates/getDaysInMonth.js.map +1 -0
  34. package/dist/dates/getRoundedTimestamp.d.ts +7 -0
  35. package/dist/dates/getRoundedTimestamp.js +14 -0
  36. package/dist/dates/getRoundedTimestamp.js.map +1 -0
  37. package/dist/dates/getTodayUTCTimestamp.d.ts +7 -0
  38. package/dist/dates/getTodayUTCTimestamp.js +8 -0
  39. package/dist/dates/getTodayUTCTimestamp.js.map +1 -0
  40. package/dist/dates/modifyDateBy.d.ts +13 -0
  41. package/dist/dates/modifyDateBy.js +40 -0
  42. package/dist/dates/modifyDateBy.js.map +1 -0
  43. package/dist/dates/transformDateToSecondaryType.d.ts +7 -0
  44. package/dist/dates/transformDateToSecondaryType.js +17 -0
  45. package/dist/dates/transformDateToSecondaryType.js.map +1 -0
  46. package/dist/features/calendar/Buddhist.js +1 -0
  47. package/dist/features/calendar/Buddhist.js.map +1 -0
  48. package/dist/features/calendar/Gregorian.js +1 -0
  49. package/dist/features/calendar/Gregorian.js.map +1 -0
  50. package/dist/features/calendar/Islamic.js +1 -0
  51. package/dist/features/calendar/Islamic.js.map +1 -0
  52. package/dist/features/calendar/Japanese.js +1 -0
  53. package/dist/features/calendar/Japanese.js.map +1 -0
  54. package/dist/features/calendar/Persian.js +1 -0
  55. package/dist/features/calendar/Persian.js.map +1 -0
  56. package/dist/generated/assets/cldr/ar.json +2804 -5904
  57. package/dist/generated/assets/cldr/ar_EG.json +2804 -5904
  58. package/dist/generated/assets/cldr/ar_SA.json +2804 -5904
  59. package/dist/generated/assets/cldr/bg.json +2727 -4977
  60. package/dist/generated/assets/cldr/ca.json +2670 -4994
  61. package/dist/generated/assets/cldr/cs.json +2710 -5496
  62. package/dist/generated/assets/cldr/cy.json +2793 -0
  63. package/dist/generated/assets/cldr/da.json +2591 -4886
  64. package/dist/generated/assets/cldr/de.json +2608 -4914
  65. package/dist/generated/assets/cldr/de_AT.json +2608 -4915
  66. package/dist/generated/assets/cldr/de_CH.json +2608 -4913
  67. package/dist/generated/assets/cldr/el.json +2589 -4881
  68. package/dist/generated/assets/cldr/el_CY.json +2589 -4881
  69. package/dist/generated/assets/cldr/en.json +2577 -4968
  70. package/dist/generated/assets/cldr/en_AU.json +2586 -4960
  71. package/dist/generated/assets/cldr/en_GB.json +2578 -4969
  72. package/dist/generated/assets/cldr/en_HK.json +2584 -4975
  73. package/dist/generated/assets/cldr/en_IE.json +2578 -4969
  74. package/dist/generated/assets/cldr/en_IN.json +2579 -4970
  75. package/dist/generated/assets/cldr/en_NZ.json +2578 -4969
  76. package/dist/generated/assets/cldr/en_PG.json +2578 -4970
  77. package/dist/generated/assets/cldr/en_SG.json +2579 -4971
  78. package/dist/generated/assets/cldr/en_ZA.json +2578 -4970
  79. package/dist/generated/assets/cldr/es.json +2633 -4910
  80. package/dist/generated/assets/cldr/es_AR.json +2638 -4912
  81. package/dist/generated/assets/cldr/es_BO.json +2638 -4911
  82. package/dist/generated/assets/cldr/es_CL.json +2638 -4912
  83. package/dist/generated/assets/cldr/es_CO.json +2637 -4911
  84. package/dist/generated/assets/cldr/es_MX.json +2638 -4913
  85. package/dist/generated/assets/cldr/es_PE.json +2638 -4911
  86. package/dist/generated/assets/cldr/es_UY.json +2638 -4913
  87. package/dist/generated/assets/cldr/es_VE.json +2638 -4912
  88. package/dist/generated/assets/cldr/et.json +2593 -4965
  89. package/dist/generated/assets/cldr/fa.json +2606 -4881
  90. package/dist/generated/assets/cldr/fi.json +2635 -5006
  91. package/dist/generated/assets/cldr/fr.json +2583 -4977
  92. package/dist/generated/assets/cldr/fr_BE.json +2583 -4977
  93. package/dist/generated/assets/cldr/fr_CA.json +2598 -4971
  94. package/dist/generated/assets/cldr/fr_CH.json +2600 -4995
  95. package/dist/generated/assets/cldr/fr_LU.json +2583 -4977
  96. package/dist/generated/assets/cldr/he.json +2699 -5376
  97. package/dist/generated/assets/cldr/hi.json +2593 -4827
  98. package/dist/generated/assets/cldr/hr.json +2646 -4917
  99. package/dist/generated/assets/cldr/hu.json +2592 -4854
  100. package/dist/generated/assets/cldr/id.json +2538 -4656
  101. package/dist/generated/assets/cldr/it.json +2583 -4948
  102. package/dist/generated/assets/cldr/it_CH.json +2583 -4948
  103. package/dist/generated/assets/cldr/ja.json +2655 -4828
  104. package/dist/generated/assets/cldr/kk.json +2583 -4723
  105. package/dist/generated/assets/cldr/ko.json +2632 -4736
  106. package/dist/generated/assets/cldr/lt.json +2714 -5479
  107. package/dist/generated/assets/cldr/lv.json +2638 -5110
  108. package/dist/generated/assets/cldr/ms.json +2532 -4513
  109. package/dist/generated/assets/cldr/nb.json +2615 -4975
  110. package/dist/generated/assets/cldr/nl.json +2595 -4882
  111. package/dist/generated/assets/cldr/nl_BE.json +2595 -4882
  112. package/dist/generated/assets/cldr/pl.json +2717 -5174
  113. package/dist/generated/assets/cldr/pt.json +2600 -4803
  114. package/dist/generated/assets/cldr/pt_PT.json +2651 -4938
  115. package/dist/generated/assets/cldr/ro.json +2639 -5088
  116. package/dist/generated/assets/cldr/ru.json +2698 -5405
  117. package/dist/generated/assets/cldr/ru_UA.json +2698 -5405
  118. package/dist/generated/assets/cldr/sk.json +2720 -5368
  119. package/dist/generated/assets/cldr/sl.json +2682 -5338
  120. package/dist/generated/assets/cldr/sr.json +2657 -5124
  121. package/dist/generated/assets/cldr/sr_Latn.json +2660 -0
  122. package/dist/generated/assets/cldr/sv.json +2625 -5009
  123. package/dist/generated/assets/cldr/th.json +2626 -4795
  124. package/dist/generated/assets/cldr/tr.json +2606 -4977
  125. package/dist/generated/assets/cldr/uk.json +2678 -5351
  126. package/dist/generated/assets/cldr/vi.json +2549 -4671
  127. package/dist/generated/assets/cldr/zh_CN.json +2541 -4630
  128. package/dist/generated/assets/cldr/zh_HK.json +2549 -4638
  129. package/dist/generated/assets/cldr/zh_SG.json +2548 -4638
  130. package/dist/generated/assets/cldr/zh_TW.json +2556 -4726
  131. package/dist/generated/json-imports/LocaleData-static.js +90 -0
  132. package/dist/generated/json-imports/LocaleData.js +88 -91
  133. package/dist/getCachedLocaleDataInstance.d.ts +4 -0
  134. package/dist/getCachedLocaleDataInstance.js +10 -0
  135. package/dist/getCachedLocaleDataInstance.js.map +1 -0
  136. package/dist/locale/getLocaleData.d.ts +11 -0
  137. package/dist/locale/getLocaleData.js +13 -17
  138. package/dist/locale/getLocaleData.js.map +1 -0
  139. package/dist/sap/base/Log.js +28 -37
  140. package/dist/sap/base/assert.js +5 -10
  141. package/dist/sap/base/util/LoaderExtensions.d.ts +4 -0
  142. package/dist/sap/base/util/LoaderExtensions.js +11 -4
  143. package/dist/sap/base/util/LoaderExtensions.js.map +1 -0
  144. package/dist/sap/base/util/array/uniqueSort.js +7 -7
  145. package/dist/sap/base/util/deepEqual.js +1 -5
  146. package/dist/sap/ui/base/Interface.js +3 -5
  147. package/dist/sap/ui/base/Metadata.js +1 -3
  148. package/dist/sap/ui/base/Object.js +26 -2
  149. package/dist/sap/ui/core/Configuration.d.ts +17 -0
  150. package/dist/sap/ui/core/Configuration.js +20 -0
  151. package/dist/sap/ui/core/Configuration.js.map +1 -0
  152. package/dist/sap/ui/core/Core.d.ts +26 -0
  153. package/dist/sap/ui/core/Core.js +7 -32
  154. package/dist/sap/ui/core/Core.js.map +1 -0
  155. package/dist/sap/ui/core/FormatSettings.d.ts +10 -0
  156. package/dist/sap/ui/core/FormatSettings.js +14 -0
  157. package/dist/sap/ui/core/FormatSettings.js.map +1 -0
  158. package/dist/sap/ui/core/Locale.js +70 -31
  159. package/dist/sap/ui/core/LocaleData.js +133 -1506
  160. package/dist/sap/ui/core/date/Buddhist.js +0 -6
  161. package/dist/sap/ui/core/date/CalendarUtils.js +36 -0
  162. package/dist/sap/ui/core/date/CalendarWeekNumbering.js +7 -0
  163. package/dist/sap/ui/core/date/Islamic.js +3 -3
  164. package/dist/sap/ui/core/date/Japanese.js +4 -4
  165. package/dist/sap/ui/core/date/UniversalDate.js +82 -23
  166. package/dist/sap/ui/core/format/DateFormat.js +530 -222
  167. package/dist/sap/ui/core/format/TimezoneUtil.js +94 -0
  168. package/package-scripts.js +15 -8
  169. package/package.json +13 -14
  170. package/src/Assets-static.ts +2 -0
  171. package/src/DateFormat.ts +8 -0
  172. package/src/LocaleData.ts +8 -0
  173. package/src/dates/{CalendarDate.js → CalendarDate.ts} +64 -35
  174. package/src/dates/ExtremeDates.ts +40 -0
  175. package/src/dates/UniversalDate.ts +51 -0
  176. package/src/dates/{calculateWeekNumber.js → calculateWeekNumber.ts} +5 -3
  177. package/src/dates/convertMonthNumbersToMonthNames.ts +34 -0
  178. package/src/dates/getDaysInMonth.ts +11 -0
  179. package/src/dates/getRoundedTimestamp.ts +14 -0
  180. package/src/dates/getTodayUTCTimestamp.ts +10 -0
  181. package/src/dates/modifyDateBy.ts +42 -0
  182. package/src/dates/transformDateToSecondaryType.ts +21 -0
  183. package/src/features/calendar/Buddhist.ts +1 -0
  184. package/src/features/calendar/Gregorian.ts +1 -0
  185. package/src/features/calendar/Islamic.ts +1 -0
  186. package/src/features/calendar/Japanese.ts +1 -0
  187. package/src/features/calendar/Persian.ts +1 -0
  188. package/src/getCachedLocaleDataInstance.ts +15 -0
  189. package/src/locale/{getLocaleData.js → getLocaleData.ts} +9 -8
  190. package/src/sap/base/util/LoaderExtensions.ts +17 -0
  191. package/src/sap/ui/core/{Core.js → Configuration.ts} +5 -21
  192. package/src/sap/ui/core/Core.ts +15 -0
  193. package/src/sap/ui/core/FormatSettings.ts +16 -0
  194. package/tsconfig.json +13 -0
  195. package/used-modules.txt +4 -1
  196. package/src/DateFormat.js +0 -3
  197. package/src/LocaleData.js +0 -3
  198. package/src/sap/base/util/LoaderExtensions.js +0 -7
  199. /package/{src/features/calendar/Buddhist.js → dist/features/calendar/Buddhist.d.ts} +0 -0
  200. /package/{src/features/calendar/Gregorian.js → dist/features/calendar/Gregorian.d.ts} +0 -0
  201. /package/{src/features/calendar/Islamic.js → dist/features/calendar/Islamic.d.ts} +0 -0
  202. /package/{src/features/calendar/Japanese.js → dist/features/calendar/Japanese.d.ts} +0 -0
  203. /package/{src/features/calendar/Persian.js → dist/features/calendar/Persian.d.ts} +0 -0
  204. /package/src/{Assets.js → Assets.ts} +0 -0
@@ -117,11 +117,5 @@ Buddhist.prototype.setUTCFullYear = function (iYear, iMonth, iDay) {
117
117
  }
118
118
  return this._setUTCBuddhist(oBuddhist);
119
119
  };
120
- Buddhist.prototype.getWeek = function () {
121
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getFullYear(), this.getMonth(), this.getDate());
122
- };
123
- Buddhist.prototype.getUTCWeek = function () {
124
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());
125
- };
126
120
  _Calendars.set(CalendarType.Buddhist, Buddhist);
127
121
  export default Buddhist;
@@ -0,0 +1,36 @@
1
+ import CalendarWeekNumbering from './CalendarWeekNumbering.js';
2
+ import Configuration from '../Configuration.js';
3
+ import LocaleData from '../LocaleData.js';
4
+ var mWeekNumberingConfiguration = {
5
+ ISO_8601: {
6
+ firstDayOfWeek: 1,
7
+ minimalDaysInFirstWeek: 4
8
+ },
9
+ MiddleEastern: {
10
+ firstDayOfWeek: 6,
11
+ minimalDaysInFirstWeek: 1
12
+ },
13
+ WesternTraditional: {
14
+ firstDayOfWeek: 0,
15
+ minimalDaysInFirstWeek: 1
16
+ }
17
+ };
18
+ var CalendarUtils = {
19
+ getWeekConfigurationValues: function (sCalendarWeekNumbering, oLocale) {
20
+ var oLocaleData;
21
+ if (mWeekNumberingConfiguration.hasOwnProperty(sCalendarWeekNumbering)) {
22
+ return mWeekNumberingConfiguration[sCalendarWeekNumbering];
23
+ }
24
+ sCalendarWeekNumbering = sCalendarWeekNumbering || CalendarWeekNumbering.Default;
25
+ if (sCalendarWeekNumbering === CalendarWeekNumbering.Default) {
26
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
27
+ oLocaleData = LocaleData.getInstance(oLocale);
28
+ return {
29
+ firstDayOfWeek: oLocaleData.getFirstDayOfWeek(),
30
+ minimalDaysInFirstWeek: oLocaleData.getMinimalDaysInFirstWeek()
31
+ };
32
+ }
33
+ return undefined;
34
+ }
35
+ };
36
+ export default CalendarUtils;
@@ -0,0 +1,7 @@
1
+ var CalendarWeekNumbering = {
2
+ Default: "Default",
3
+ ISO_8601: "ISO_8601",
4
+ MiddleEastern: "MiddleEastern",
5
+ WesternTraditional: "WesternTraditional"
6
+ };
7
+ export default CalendarWeekNumbering;
@@ -1,8 +1,8 @@
1
- import Core from '../Core.js';
2
1
  import UniversalDate from './UniversalDate.js';
3
2
  import CalendarType from '../CalendarType.js';
4
3
  import Log from '../../../base/Log.js';
5
4
  import _Calendars from './_Calendars.js';
5
+ import Configuration from '../Configuration.js';
6
6
  var Islamic = UniversalDate.extend('sap.ui.core.date.Islamic', {
7
7
  constructor: function () {
8
8
  var aArgs = arguments;
@@ -102,9 +102,9 @@ function toGregorianArguments(aArgs) {
102
102
  function initCustomizationMap() {
103
103
  var sDateFormat, oCustomizationJSON;
104
104
  oCustomizationMap = {};
105
- sDateFormat = Core.getConfiguration().getFormatSettings().getLegacyDateFormat();
105
+ sDateFormat = Configuration.getFormatSettings().getLegacyDateFormat();
106
106
  sDateFormat = _isSupportedIslamicCalendarType(sDateFormat) ? sDateFormat : 'A';
107
- oCustomizationJSON = Core.getConfiguration().getFormatSettings().getLegacyDateCalendarCustomizing();
107
+ oCustomizationJSON = Configuration.getFormatSettings().getLegacyDateCalendarCustomizing();
108
108
  oCustomizationJSON = oCustomizationJSON || [];
109
109
  if (!oCustomizationJSON.length) {
110
110
  Log.warning('No calendar customizations.');
@@ -152,11 +152,11 @@ Japanese.prototype.setUTCEra = function (iEra, iYear, iMonth, iDay) {
152
152
  }
153
153
  return this._setUTCJapanese(oJapanese);
154
154
  };
155
- Japanese.prototype.getWeek = function () {
156
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getFullYear(), this.getMonth(), this.getDate());
155
+ Japanese.prototype.getWeek = function (oLocale, vCalendarWeekNumbering) {
156
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getFullYear(), this.getMonth(), this.getDate(), oLocale, vCalendarWeekNumbering);
157
157
  };
158
- Japanese.prototype.getUTCWeek = function () {
159
- return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());
158
+ Japanese.prototype.getUTCWeek = function (oLocale, vCalendarWeekNumbering) {
159
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.oDate.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate(), oLocale, vCalendarWeekNumbering);
160
160
  };
161
161
  _Calendars.set(CalendarType.Japanese, Japanese);
162
162
  export default Japanese;
@@ -1,7 +1,10 @@
1
- import Core from '../Core.js';
2
1
  import BaseObject from '../../base/Object.js';
2
+ import Configuration from '../Configuration.js';
3
+ import Locale from '../Locale.js';
3
4
  import LocaleData from '../LocaleData.js';
4
5
  import _Calendars from './_Calendars.js';
6
+ import CalendarUtils from './CalendarUtils.js';
7
+ import CalendarWeekNumbering from './CalendarWeekNumbering.js';
5
8
  var UniversalDate = BaseObject.extend('sap.ui.core.date.UniversalDate', {
6
9
  constructor: function () {
7
10
  var clDate = UniversalDate.getClass();
@@ -20,7 +23,7 @@ UniversalDate.prototype.createDate = function (clDate, aArgs) {
20
23
  case 0:
21
24
  return new clDate();
22
25
  case 1:
23
- return new clDate(aArgs[0]);
26
+ return new clDate(aArgs[0] instanceof Date ? aArgs[0].getTime() : aArgs[0]);
24
27
  case 2:
25
28
  return new clDate(aArgs[0], aArgs[1]);
26
29
  case 3:
@@ -39,9 +42,14 @@ UniversalDate.getInstance = function (oDate, sCalendarType) {
39
42
  var clDate, oInstance;
40
43
  if (oDate instanceof UniversalDate) {
41
44
  oDate = oDate.getJSDate();
45
+ } else if (!oDate) {
46
+ oDate = new Date();
47
+ }
48
+ if (isNaN(oDate.getTime())) {
49
+ throw new Error('The given date object is invalid');
42
50
  }
43
51
  if (!sCalendarType) {
44
- sCalendarType = Core.getConfiguration().getCalendarType();
52
+ sCalendarType = Configuration.getCalendarType();
45
53
  }
46
54
  clDate = UniversalDate.getClass(sCalendarType);
47
55
  oInstance = Object.create(clDate.prototype);
@@ -51,7 +59,7 @@ UniversalDate.getInstance = function (oDate, sCalendarType) {
51
59
  };
52
60
  UniversalDate.getClass = function (sCalendarType) {
53
61
  if (!sCalendarType) {
54
- sCalendarType = Core.getConfiguration().getCalendarType();
62
+ sCalendarType = Configuration.getCalendarType();
55
63
  }
56
64
  return _Calendars.get(sCalendarType);
57
65
  };
@@ -114,18 +122,22 @@ UniversalDate.prototype.getUTCEra = function () {
114
122
  };
115
123
  UniversalDate.prototype.setUTCEra = function (iEra) {
116
124
  };
117
- UniversalDate.prototype.getWeek = function () {
118
- return UniversalDate.getWeekByDate(this.sCalendarType, this.getFullYear(), this.getMonth(), this.getDate());
125
+ UniversalDate.prototype.getWeek = function (oLocale, vCalendarWeekNumbering) {
126
+ checkWeekConfig(vCalendarWeekNumbering);
127
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.getFullYear(), this.getMonth(), this.getDate(), oLocale, vCalendarWeekNumbering);
119
128
  };
120
- UniversalDate.prototype.setWeek = function (oWeek) {
121
- var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week);
129
+ UniversalDate.prototype.setWeek = function (oWeek, oLocale, vCalendarWeekNumbering) {
130
+ checkWeekConfig(vCalendarWeekNumbering);
131
+ var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
122
132
  this.setFullYear(oDate.year, oDate.month, oDate.day);
123
133
  };
124
- UniversalDate.prototype.getUTCWeek = function () {
125
- return UniversalDate.getWeekByDate(this.sCalendarType, this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());
134
+ UniversalDate.prototype.getUTCWeek = function (oLocale, vCalendarWeekNumbering) {
135
+ checkWeekConfig(vCalendarWeekNumbering);
136
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate(), oLocale, vCalendarWeekNumbering);
126
137
  };
127
- UniversalDate.prototype.setUTCWeek = function (oWeek) {
128
- var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week);
138
+ UniversalDate.prototype.setUTCWeek = function (oWeek, oLocale, vCalendarWeekNumbering) {
139
+ checkWeekConfig(vCalendarWeekNumbering);
140
+ var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
129
141
  this.setUTCFullYear(oDate.year, oDate.month, oDate.day);
130
142
  };
131
143
  UniversalDate.prototype.getQuarter = function () {
@@ -159,15 +171,21 @@ UniversalDate.prototype.getTimezoneLong = function () {
159
171
  }
160
172
  };
161
173
  var iMillisecondsInWeek = 7 * 24 * 60 * 60 * 1000;
162
- UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay) {
163
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), clDate = this.getClass(sCalendarType), oFirstDay = getFirstDayOfFirstWeek(clDate, iYear), oDate = new clDate(clDate.UTC(iYear, iMonth, iDay)), iWeek, iLastYear, iNextYear, oLastFirstDay, oNextFirstDay;
164
- if (oLocale.getRegion() === 'US') {
174
+ UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay, oLocale, vCalendarWeekNumbering) {
175
+ checkWeekConfig(vCalendarWeekNumbering);
176
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
177
+ var clDate = this.getClass(sCalendarType);
178
+ var oFirstDay = getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering);
179
+ var oDate = new clDate(clDate.UTC(iYear, iMonth, iDay));
180
+ var iWeek, iLastYear, iNextYear, oLastFirstDay, oNextFirstDay;
181
+ var bSplitWeek = isSplitWeek(vCalendarWeekNumbering, oLocale);
182
+ if (bSplitWeek) {
165
183
  iWeek = calculateWeeks(oFirstDay, oDate);
166
184
  } else {
167
185
  iLastYear = iYear - 1;
168
186
  iNextYear = iYear + 1;
169
- oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear);
170
- oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear);
187
+ oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear, oLocale, vCalendarWeekNumbering);
188
+ oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear, oLocale, vCalendarWeekNumbering);
171
189
  if (oDate >= oNextFirstDay) {
172
190
  iYear = iNextYear;
173
191
  iWeek = 0;
@@ -183,9 +201,14 @@ UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay) {
183
201
  week: iWeek
184
202
  };
185
203
  };
186
- UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek) {
187
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), clDate = this.getClass(sCalendarType), oFirstDay = getFirstDayOfFirstWeek(clDate, iYear), oDate = new clDate(oFirstDay.valueOf() + iWeek * iMillisecondsInWeek);
188
- if (oLocale.getRegion() === 'US' && iWeek === 0 && oFirstDay.getUTCFullYear() < iYear) {
204
+ UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek, oLocale, vCalendarWeekNumbering) {
205
+ checkWeekConfig(vCalendarWeekNumbering);
206
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
207
+ var clDate = this.getClass(sCalendarType);
208
+ var oFirstDay = getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering);
209
+ var oDate = new clDate(oFirstDay.valueOf() + iWeek * iMillisecondsInWeek);
210
+ var bSplitWeek = isSplitWeek(vCalendarWeekNumbering, oLocale);
211
+ if (bSplitWeek && iWeek === 0 && oFirstDay.getUTCFullYear() < iYear) {
189
212
  return {
190
213
  year: iYear,
191
214
  month: 0,
@@ -198,8 +221,44 @@ UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek) {
198
221
  day: oDate.getUTCDate()
199
222
  };
200
223
  };
201
- function getFirstDayOfFirstWeek(clDate, iYear) {
202
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), iMinDays = oLocaleData.getMinimalDaysInFirstWeek(), iFirstDayOfWeek = oLocaleData.getFirstDayOfWeek(), oFirstDay = new clDate(clDate.UTC(iYear, 0, 1)), iDayCount = 7;
224
+ function isSplitWeek(vCalendarWeekNumbering, oLocale) {
225
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
226
+ var oLocaleData = LocaleData.getInstance(oLocale);
227
+ return (!isCalendarWeekConfigurationDefined(vCalendarWeekNumbering) || vCalendarWeekNumbering === CalendarWeekNumbering.Default) && oLocaleData.firstDayStartsFirstWeek();
228
+ }
229
+ function checkWeekConfig(vCalendarWeekNumbering) {
230
+ if (typeof vCalendarWeekNumbering === 'object') {
231
+ if (!isCalendarWeekConfigurationDefined(vCalendarWeekNumbering)) {
232
+ throw new TypeError('Week config requires firstDayOfWeek and minimalDaysInFirstWeek to be set');
233
+ }
234
+ } else if (vCalendarWeekNumbering && !Object.values(CalendarWeekNumbering).includes(vCalendarWeekNumbering)) {
235
+ throw new TypeError('Illegal format option calendarWeekNumbering: \'' + vCalendarWeekNumbering + '\'');
236
+ }
237
+ }
238
+ function isCalendarWeekConfigurationDefined(vCalendarWeekNumbering) {
239
+ if (typeof vCalendarWeekNumbering === 'object') {
240
+ return typeof vCalendarWeekNumbering.firstDayOfWeek === 'number' && typeof vCalendarWeekNumbering.minimalDaysInFirstWeek === 'number';
241
+ } else if (vCalendarWeekNumbering) {
242
+ return true;
243
+ }
244
+ return false;
245
+ }
246
+ function resolveCalendarWeekConfiguration(vCalendarWeekNumbering, oLocale) {
247
+ if (typeof vCalendarWeekNumbering === 'object' && typeof vCalendarWeekNumbering.firstDayOfWeek === 'number' && typeof vCalendarWeekNumbering.minimalDaysInFirstWeek === 'number') {
248
+ return vCalendarWeekNumbering;
249
+ }
250
+ return CalendarUtils.getWeekConfigurationValues(vCalendarWeekNumbering, oLocale);
251
+ }
252
+ function getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering) {
253
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
254
+ var oWeekConfig = resolveCalendarWeekConfiguration(vCalendarWeekNumbering, oLocale);
255
+ var iMinDays = oWeekConfig.minimalDaysInFirstWeek;
256
+ var iFirstDayOfWeek = oWeekConfig.firstDayOfWeek;
257
+ var oFirstDay = new clDate(clDate.UTC(iYear, 0, 1));
258
+ var iDayCount = 7;
259
+ if (isNaN(oFirstDay.getTime())) {
260
+ throw new Error('Could not determine the first day of the week, because the date ' + 'object is invalid');
261
+ }
203
262
  while (oFirstDay.getUTCDay() !== iFirstDayOfWeek) {
204
263
  oFirstDay.setUTCDate(oFirstDay.getUTCDate() - 1);
205
264
  iDayCount--;
@@ -239,7 +298,7 @@ UniversalDate.getEraStartDate = function (sCalendarType, iEra) {
239
298
  }
240
299
  };
241
300
  function getEras(sCalendarType) {
242
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), aEras = mEras[sCalendarType];
301
+ var oLocale = Configuration.getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), aEras = mEras[sCalendarType];
243
302
  if (!aEras) {
244
303
  var aEras = oLocaleData.getEraDates(sCalendarType);
245
304
  if (!aEras[0]) {