@ui5/webcomponents-localization 0.0.0-db2be6526 → 0.0.0-db622d8a8

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 (191) hide show
  1. package/.eslintignore +1 -1
  2. package/.npsrc.json +3 -0
  3. package/CHANGELOG.md +420 -0
  4. package/README.md +5 -6
  5. package/{src/Assets-static.js → dist/Assets-static.d.ts} +0 -1
  6. package/dist/Assets-static.js +1 -0
  7. package/dist/Assets-static.js.map +1 -0
  8. package/dist/Assets.d.ts +1 -0
  9. package/dist/Assets.js +1 -0
  10. package/dist/Assets.js.map +1 -0
  11. package/dist/DateFormat.d.ts +6 -0
  12. package/dist/DateFormat.js +6 -2
  13. package/dist/DateFormat.js.map +1 -0
  14. package/dist/LocaleData.d.ts +6 -0
  15. package/dist/LocaleData.js +6 -2
  16. package/dist/LocaleData.js.map +1 -0
  17. package/dist/dates/CalendarDate.d.ts +43 -0
  18. package/dist/dates/CalendarDate.js +171 -201
  19. package/dist/dates/CalendarDate.js.map +1 -0
  20. package/dist/dates/ExtremeDates.d.ts +5 -0
  21. package/dist/dates/ExtremeDates.js +25 -35
  22. package/dist/dates/ExtremeDates.js.map +1 -0
  23. package/dist/dates/UI5Date.d.ts +6 -0
  24. package/dist/dates/UI5Date.js +7 -0
  25. package/dist/dates/UI5Date.js.map +1 -0
  26. package/dist/dates/UniversalDate.d.ts +47 -0
  27. package/dist/dates/UniversalDate.js +5 -0
  28. package/dist/dates/UniversalDate.js.map +1 -0
  29. package/dist/dates/calculateWeekNumber.d.ts +5 -0
  30. package/dist/dates/calculateWeekNumber.js +42 -48
  31. package/dist/dates/calculateWeekNumber.js.map +1 -0
  32. package/dist/dates/convertMonthNumbersToMonthNames.d.ts +16 -0
  33. package/dist/dates/convertMonthNumbersToMonthNames.js +30 -0
  34. package/dist/dates/convertMonthNumbersToMonthNames.js.map +1 -0
  35. package/dist/dates/getDaysInMonth.d.ts +3 -0
  36. package/dist/dates/getDaysInMonth.js +10 -0
  37. package/dist/dates/getDaysInMonth.js.map +1 -0
  38. package/dist/dates/getRoundedTimestamp.d.ts +7 -0
  39. package/dist/dates/getRoundedTimestamp.js +10 -9
  40. package/dist/dates/getRoundedTimestamp.js.map +1 -0
  41. package/dist/dates/getTodayUTCTimestamp.d.ts +7 -0
  42. package/dist/dates/getTodayUTCTimestamp.js +3 -3
  43. package/dist/dates/getTodayUTCTimestamp.js.map +1 -0
  44. package/dist/dates/modifyDateBy.d.ts +13 -0
  45. package/dist/dates/modifyDateBy.js +27 -29
  46. package/dist/dates/modifyDateBy.js.map +1 -0
  47. package/dist/dates/transformDateToSecondaryType.d.ts +7 -0
  48. package/dist/dates/transformDateToSecondaryType.js +18 -0
  49. package/dist/dates/transformDateToSecondaryType.js.map +1 -0
  50. package/dist/features/calendar/Buddhist.js +1 -0
  51. package/dist/features/calendar/Buddhist.js.map +1 -0
  52. package/dist/features/calendar/Gregorian.js +1 -0
  53. package/dist/features/calendar/Gregorian.js.map +1 -0
  54. package/dist/features/calendar/Islamic.js +1 -0
  55. package/dist/features/calendar/Islamic.js.map +1 -0
  56. package/dist/features/calendar/Japanese.js +1 -0
  57. package/dist/features/calendar/Japanese.js.map +1 -0
  58. package/dist/features/calendar/Persian.js +1 -0
  59. package/dist/features/calendar/Persian.js.map +1 -0
  60. package/dist/generated/assets/cldr/ar.json +5531 -5906
  61. package/dist/generated/assets/cldr/ar_EG.json +5531 -5906
  62. package/dist/generated/assets/cldr/ar_SA.json +5530 -5906
  63. package/dist/generated/assets/cldr/bg.json +4452 -4979
  64. package/dist/generated/assets/cldr/ca.json +4440 -4996
  65. package/dist/generated/assets/cldr/cs.json +4960 -5498
  66. package/dist/generated/assets/cldr/cy.json +5211 -5884
  67. package/dist/generated/assets/cldr/da.json +4308 -4888
  68. package/dist/generated/assets/cldr/de.json +4313 -4916
  69. package/dist/generated/assets/cldr/de_AT.json +4314 -4917
  70. package/dist/generated/assets/cldr/de_CH.json +4312 -4915
  71. package/dist/generated/assets/cldr/el.json +4281 -4883
  72. package/dist/generated/assets/cldr/el_CY.json +4281 -4883
  73. package/dist/generated/assets/cldr/en.json +4316 -4971
  74. package/dist/generated/assets/cldr/en_AU.json +4319 -4962
  75. package/dist/generated/assets/cldr/en_GB.json +4329 -4971
  76. package/dist/generated/assets/cldr/en_HK.json +4337 -4977
  77. package/dist/generated/assets/cldr/en_IE.json +4328 -4971
  78. package/dist/generated/assets/cldr/en_IN.json +4333 -4972
  79. package/dist/generated/assets/cldr/en_NZ.json +4328 -4971
  80. package/dist/generated/assets/cldr/en_PG.json +4329 -4972
  81. package/dist/generated/assets/cldr/en_SG.json +4333 -4973
  82. package/dist/generated/assets/cldr/en_ZA.json +4329 -4972
  83. package/dist/generated/assets/cldr/es.json +4331 -4912
  84. package/dist/generated/assets/cldr/es_AR.json +4334 -4914
  85. package/dist/generated/assets/cldr/es_BO.json +4333 -4913
  86. package/dist/generated/assets/cldr/es_CL.json +4334 -4914
  87. package/dist/generated/assets/cldr/es_CO.json +4333 -4913
  88. package/dist/generated/assets/cldr/es_MX.json +4335 -4915
  89. package/dist/generated/assets/cldr/es_PE.json +4333 -4913
  90. package/dist/generated/assets/cldr/es_UY.json +4335 -4915
  91. package/dist/generated/assets/cldr/es_VE.json +4334 -4914
  92. package/dist/generated/assets/cldr/et.json +4340 -4967
  93. package/dist/generated/assets/cldr/fa.json +4367 -4883
  94. package/dist/generated/assets/cldr/fi.json +4463 -5008
  95. package/dist/generated/assets/cldr/fr.json +4357 -4979
  96. package/dist/generated/assets/cldr/fr_BE.json +4357 -4979
  97. package/dist/generated/assets/cldr/fr_CA.json +4351 -4973
  98. package/dist/generated/assets/cldr/fr_CH.json +4375 -4997
  99. package/dist/generated/assets/cldr/fr_LU.json +4357 -4979
  100. package/dist/generated/assets/cldr/he.json +4869 -5378
  101. package/dist/generated/assets/cldr/hi.json +4295 -4829
  102. package/dist/generated/assets/cldr/hr.json +4583 -4919
  103. package/dist/generated/assets/cldr/hu.json +4364 -4856
  104. package/dist/generated/assets/cldr/id.json +4060 -4658
  105. package/dist/generated/assets/cldr/it.json +4299 -4950
  106. package/dist/generated/assets/cldr/it_CH.json +4299 -4950
  107. package/dist/generated/assets/cldr/ja.json +4211 -4830
  108. package/dist/generated/assets/cldr/kk.json +4339 -4725
  109. package/dist/generated/assets/cldr/ko.json +4189 -4738
  110. package/dist/generated/assets/cldr/lt.json +4850 -5481
  111. package/dist/generated/assets/cldr/lv.json +4587 -5112
  112. package/dist/generated/assets/cldr/ms.json +4021 -4515
  113. package/dist/generated/assets/cldr/nb.json +4335 -4977
  114. package/dist/generated/assets/cldr/nl.json +4294 -4884
  115. package/dist/generated/assets/cldr/nl_BE.json +4294 -4884
  116. package/dist/generated/assets/cldr/pl.json +4667 -5176
  117. package/dist/generated/assets/cldr/pt.json +4235 -4805
  118. package/dist/generated/assets/cldr/pt_PT.json +4372 -4940
  119. package/dist/generated/assets/cldr/ro.json +4563 -5090
  120. package/dist/generated/assets/cldr/ru.json +4909 -5407
  121. package/dist/generated/assets/cldr/ru_UA.json +4909 -5407
  122. package/dist/generated/assets/cldr/sk.json +4939 -5370
  123. package/dist/generated/assets/cldr/sl.json +4910 -5340
  124. package/dist/generated/assets/cldr/sr.json +4585 -5126
  125. package/dist/generated/assets/cldr/sr_Latn.json +4574 -5127
  126. package/dist/generated/assets/cldr/sv.json +4362 -5011
  127. package/dist/generated/assets/cldr/th.json +4214 -4797
  128. package/dist/generated/assets/cldr/tr.json +4400 -4979
  129. package/dist/generated/assets/cldr/uk.json +4858 -5353
  130. package/dist/generated/assets/cldr/vi.json +4070 -4673
  131. package/dist/generated/assets/cldr/zh_CN.json +4100 -4632
  132. package/dist/generated/assets/cldr/zh_HK.json +4108 -4640
  133. package/dist/generated/assets/cldr/zh_SG.json +4108 -4640
  134. package/dist/generated/assets/cldr/zh_TW.json +4131 -4728
  135. package/dist/generated/json-imports/LocaleData-static.js +2 -1
  136. package/dist/generated/json-imports/LocaleData.js +2 -1
  137. package/dist/getCachedLocaleDataInstance.d.ts +4 -0
  138. package/dist/getCachedLocaleDataInstance.js +6 -9
  139. package/dist/getCachedLocaleDataInstance.js.map +1 -0
  140. package/dist/locale/getLocaleData.d.ts +11 -0
  141. package/dist/locale/getLocaleData.js +13 -17
  142. package/dist/locale/getLocaleData.js.map +1 -0
  143. package/dist/sap/base/Log.js +28 -29
  144. package/dist/sap/base/assert.js +5 -6
  145. package/dist/sap/base/util/LoaderExtensions.d.ts +4 -0
  146. package/dist/sap/base/util/LoaderExtensions.js +9 -12
  147. package/dist/sap/base/util/LoaderExtensions.js.map +1 -0
  148. package/dist/sap/ui/core/Configuration.d.ts +17 -0
  149. package/dist/sap/ui/core/Configuration.js +21 -0
  150. package/dist/sap/ui/core/Configuration.js.map +1 -0
  151. package/dist/sap/ui/core/Core.d.ts +26 -0
  152. package/dist/sap/ui/core/Core.js +7 -32
  153. package/dist/sap/ui/core/Core.js.map +1 -0
  154. package/dist/sap/ui/core/FormatSettings.d.ts +10 -0
  155. package/dist/sap/ui/core/FormatSettings.js +14 -0
  156. package/dist/sap/ui/core/FormatSettings.js.map +1 -0
  157. package/dist/sap/ui/core/Locale.js +13 -0
  158. package/dist/sap/ui/core/LocaleData.js +180 -25
  159. package/dist/sap/ui/core/date/Buddhist.js +0 -6
  160. package/dist/sap/ui/core/date/CalendarUtils.js +36 -0
  161. package/dist/sap/ui/core/date/CalendarWeekNumbering.js +7 -0
  162. package/dist/sap/ui/core/date/Islamic.js +3 -3
  163. package/dist/sap/ui/core/date/Japanese.js +4 -4
  164. package/dist/sap/ui/core/date/UI5Date.js +305 -0
  165. package/dist/sap/ui/core/date/UniversalDate.js +84 -26
  166. package/dist/sap/ui/core/format/DateFormat.js +786 -477
  167. package/dist/sap/ui/core/format/TimezoneUtil.js +89 -0
  168. package/{package-scripts.js → package-scripts.cjs} +7 -10
  169. package/package.json +7 -5
  170. package/tsconfig.json +14 -0
  171. package/used-modules.txt +5 -1
  172. package/hash.txt +0 -1
  173. package/src/Assets.js +0 -2
  174. package/src/DateFormat.js +0 -3
  175. package/src/LocaleData.js +0 -3
  176. package/src/dates/CalendarDate.js +0 -223
  177. package/src/dates/ExtremeDates.js +0 -39
  178. package/src/dates/calculateWeekNumber.js +0 -51
  179. package/src/dates/getRoundedTimestamp.js +0 -14
  180. package/src/dates/getTodayUTCTimestamp.js +0 -9
  181. package/src/dates/modifyDateBy.js +0 -42
  182. package/src/getCachedLocaleDataInstance.js +0 -13
  183. package/src/locale/getLocaleData.js +0 -27
  184. package/src/sap/base/util/LoaderExtensions.js +0 -17
  185. package/src/sap/ui/core/Core.js +0 -38
  186. /package/{config/.eslintrc.js → .eslintrc.cjs} +0 -0
  187. /package/{src/features/calendar/Buddhist.js → dist/features/calendar/Buddhist.d.ts} +0 -0
  188. /package/{src/features/calendar/Gregorian.js → dist/features/calendar/Gregorian.d.ts} +0 -0
  189. /package/{src/features/calendar/Islamic.js → dist/features/calendar/Islamic.d.ts} +0 -0
  190. /package/{src/features/calendar/Japanese.js → dist/features/calendar/Japanese.d.ts} +0 -0
  191. /package/{src/features/calendar/Persian.js → dist/features/calendar/Persian.d.ts} +0 -0
@@ -0,0 +1,305 @@
1
+ import Configuration from '../Configuration.js';
2
+ import TimezoneUtil from '../format/TimezoneUtil.js';
3
+ var aAllParts = [
4
+ 'year',
5
+ 'month',
6
+ 'day',
7
+ 'hour',
8
+ 'minute',
9
+ 'second',
10
+ 'fractionalSecond'
11
+ ], rIsUTCString = /Z|GMT|:.*[\+|\-]|^([\+|\-]\d{2})?\d{4}(-\d{2}){0,2}$/, aWeekday = [
12
+ 'Sun',
13
+ 'Mon',
14
+ 'Tue',
15
+ 'Wed',
16
+ 'Thu',
17
+ 'Fri',
18
+ 'Sat'
19
+ ], aMonths = [
20
+ 'Jan',
21
+ 'Feb',
22
+ 'Mar',
23
+ 'Apr',
24
+ 'May',
25
+ 'Jun',
26
+ 'Jul',
27
+ 'Aug',
28
+ 'Sep',
29
+ 'Oct',
30
+ 'Nov',
31
+ 'Dec'
32
+ ], mWeekdayToDay = {
33
+ Sun: 0,
34
+ Mon: 1,
35
+ Tue: 2,
36
+ Wed: 3,
37
+ Thu: 4,
38
+ Fri: 5,
39
+ Sat: 6
40
+ };
41
+ function addLeadingZeros(iValue, iLength) {
42
+ return (iValue < 0 ? '-' : '') + Math.abs(iValue).toString().padStart(iLength, '0');
43
+ }
44
+ function UI5Date(vDateParts, sTimezoneID) {
45
+ var oDateInstance = UI5Date._createDateInstance(vDateParts);
46
+ Object.defineProperties(this, {
47
+ sTimezoneID: { value: sTimezoneID },
48
+ oDate: {
49
+ value: oDateInstance,
50
+ writable: true
51
+ },
52
+ oDateParts: {
53
+ value: undefined,
54
+ writable: true
55
+ }
56
+ });
57
+ if (isNaN(oDateInstance)) {
58
+ return;
59
+ }
60
+ if (vDateParts.length > 1 || vDateParts.length === 1 && typeof vDateParts[0] === 'string' && !rIsUTCString.test(vDateParts[0])) {
61
+ this._setParts(aAllParts, [
62
+ oDateInstance.getFullYear(),
63
+ oDateInstance.getMonth(),
64
+ oDateInstance.getDate(),
65
+ oDateInstance.getHours(),
66
+ oDateInstance.getMinutes(),
67
+ oDateInstance.getSeconds(),
68
+ oDateInstance.getMilliseconds()
69
+ ]);
70
+ }
71
+ }
72
+ UI5Date.prototype = Object.create(Date.prototype, { constructor: { value: Date } });
73
+ UI5Date.prototype[Symbol.toStringTag] = 'Date';
74
+ UI5Date.prototype._getPart = function (sPart) {
75
+ var iResult;
76
+ if (isNaN(this.oDate)) {
77
+ return NaN;
78
+ }
79
+ this.oDateParts = this.oDateParts || TimezoneUtil._getParts(this.oDate, this.sTimezoneID);
80
+ if (sPart === 'weekday') {
81
+ return mWeekdayToDay[this.oDateParts.weekday];
82
+ }
83
+ iResult = parseInt(this.oDateParts[sPart]);
84
+ if (sPart === 'month') {
85
+ iResult -= 1;
86
+ } else if (sPart === 'year') {
87
+ if (this.oDateParts.era === 'B') {
88
+ iResult = 1 - iResult;
89
+ }
90
+ }
91
+ return iResult;
92
+ };
93
+ UI5Date.prototype._setParts = function (aParts, aValues) {
94
+ var i, oCurrentDateParts, oNewDateAsUTCTimestamp, iNewTimestamp, sPart, vValue, oDateParts = {}, iMaxLength = Math.min(aParts.length, aValues.length);
95
+ if (iMaxLength === 0) {
96
+ return this.setTime(NaN);
97
+ }
98
+ for (i = 0; i < iMaxLength; i += 1) {
99
+ vValue = parseInt(+aValues[i]);
100
+ sPart = aParts[i];
101
+ if (isNaN(vValue)) {
102
+ return this.setTime(NaN);
103
+ }
104
+ if (sPart === 'month') {
105
+ vValue += 1;
106
+ } else if (sPart === 'year') {
107
+ if (vValue <= 0) {
108
+ vValue = 1 - vValue;
109
+ oDateParts.era = 'B';
110
+ } else {
111
+ oDateParts.era = 'A';
112
+ }
113
+ }
114
+ oDateParts[sPart] = vValue.toString();
115
+ }
116
+ if (this.oDateParts) {
117
+ oCurrentDateParts = this.oDateParts;
118
+ } else if (isNaN(this.oDate)) {
119
+ oCurrentDateParts = {
120
+ day: '1',
121
+ fractionalSecond: '0',
122
+ hour: '0',
123
+ minute: '0',
124
+ month: '1',
125
+ second: '0'
126
+ };
127
+ } else {
128
+ oCurrentDateParts = TimezoneUtil._getParts(this.oDate, this.sTimezoneID);
129
+ }
130
+ oDateParts = Object.assign({}, oCurrentDateParts, oDateParts);
131
+ oNewDateAsUTCTimestamp = TimezoneUtil._getDateFromParts(oDateParts);
132
+ if (isNaN(oNewDateAsUTCTimestamp)) {
133
+ return this.setTime(NaN);
134
+ }
135
+ iNewTimestamp = oNewDateAsUTCTimestamp.getTime() + TimezoneUtil.calculateOffset(oNewDateAsUTCTimestamp, this.sTimezoneID) * 1000;
136
+ return this.setTime(iNewTimestamp);
137
+ };
138
+ UI5Date.prototype.clone = function () {
139
+ return UI5Date.getInstance(this);
140
+ };
141
+ UI5Date.prototype.getDate = function () {
142
+ return this._getPart('day');
143
+ };
144
+ UI5Date.prototype.getDay = function () {
145
+ return this._getPart('weekday');
146
+ };
147
+ UI5Date.prototype.getFullYear = function () {
148
+ return this._getPart('year');
149
+ };
150
+ UI5Date.prototype.getHours = function () {
151
+ return this._getPart('hour');
152
+ };
153
+ UI5Date.prototype.getMilliseconds = function () {
154
+ return this._getPart('fractionalSecond');
155
+ };
156
+ UI5Date.prototype.getMinutes = function () {
157
+ return this._getPart('minute');
158
+ };
159
+ UI5Date.prototype.getMonth = function () {
160
+ return this._getPart('month');
161
+ };
162
+ UI5Date.prototype.getSeconds = function () {
163
+ return this._getPart('second');
164
+ };
165
+ UI5Date.prototype.getTimezoneOffset = function () {
166
+ return TimezoneUtil.calculateOffset(this.oDate, this.sTimezoneID) / 60;
167
+ };
168
+ UI5Date.prototype.getYear = function () {
169
+ return this._getPart('year') - 1900;
170
+ };
171
+ UI5Date.prototype.setDate = function (iDay) {
172
+ return this._setParts(['day'], arguments);
173
+ };
174
+ UI5Date.prototype.setFullYear = function (iYear, iMonth, iDay) {
175
+ return this._setParts([
176
+ 'year',
177
+ 'month',
178
+ 'day'
179
+ ], arguments);
180
+ };
181
+ UI5Date.prototype.setHours = function (iHours, iMinutes, iSeconds, iMilliseconds) {
182
+ return this._setParts([
183
+ 'hour',
184
+ 'minute',
185
+ 'second',
186
+ 'fractionalSecond'
187
+ ], arguments);
188
+ };
189
+ UI5Date.prototype.setMilliseconds = function (iMilliseconds) {
190
+ return this._setParts(['fractionalSecond'], arguments);
191
+ };
192
+ UI5Date.prototype.setMinutes = function (iMinutes, iSeconds, iMilliseconds) {
193
+ return this._setParts([
194
+ 'minute',
195
+ 'second',
196
+ 'fractionalSecond'
197
+ ], arguments);
198
+ };
199
+ UI5Date.prototype.setMonth = function (iMonth, iDay) {
200
+ return this._setParts([
201
+ 'month',
202
+ 'day'
203
+ ], arguments);
204
+ };
205
+ UI5Date.prototype.setSeconds = function (iSeconds, iMilliseconds) {
206
+ return this._setParts([
207
+ 'second',
208
+ 'fractionalSecond'
209
+ ], arguments);
210
+ };
211
+ UI5Date.prototype.setTime = function (iTime) {
212
+ this.oDateParts = undefined;
213
+ return this.oDate.setTime(iTime);
214
+ };
215
+ UI5Date.prototype.setYear = function (iYear) {
216
+ return this._setParts(['year'], [parseInt(iYear) + 1900]);
217
+ };
218
+ UI5Date.prototype.toDateString = function () {
219
+ if (isNaN(this.oDate)) {
220
+ return this.oDate.toDateString();
221
+ }
222
+ return aWeekday[this.getDay()] + ' ' + aMonths[this.getMonth()] + ' ' + addLeadingZeros(this.getDate(), 2) + ' ' + addLeadingZeros(this.getFullYear(), 4);
223
+ };
224
+ UI5Date.prototype.toString = function () {
225
+ if (isNaN(this.oDate)) {
226
+ return this.oDate.toString();
227
+ }
228
+ return this.toDateString() + ' ' + this.toTimeString();
229
+ };
230
+ UI5Date.prototype.toTimeString = function () {
231
+ var iHours, iMinutes, sSign, iTimeZoneOffset;
232
+ if (isNaN(this.oDate)) {
233
+ return this.oDate.toTimeString();
234
+ }
235
+ iTimeZoneOffset = this.getTimezoneOffset();
236
+ sSign = iTimeZoneOffset > 0 ? '-' : '+';
237
+ iHours = Math.floor(Math.abs(iTimeZoneOffset) / 60);
238
+ iMinutes = Math.abs(iTimeZoneOffset) % 60;
239
+ return addLeadingZeros(this.getHours(), 2) + ':' + addLeadingZeros(this.getMinutes(), 2) + ':' + addLeadingZeros(this.getSeconds(), 2) + ' GMT' + sSign + addLeadingZeros(iHours, 2) + addLeadingZeros(iMinutes, 2);
240
+ };
241
+ [
242
+ 'getTime',
243
+ 'getUTCDate',
244
+ 'getUTCDay',
245
+ 'getUTCFullYear',
246
+ 'getUTCHours',
247
+ 'getUTCMilliseconds',
248
+ 'getUTCMinutes',
249
+ 'getUTCMonth',
250
+ 'getUTCSeconds',
251
+ 'toGMTString',
252
+ 'toISOString',
253
+ 'toJSON',
254
+ 'toUTCString',
255
+ 'valueOf'
256
+ ].forEach(function (sMethod) {
257
+ UI5Date.prototype[sMethod] = function () {
258
+ return this.oDate[sMethod].apply(this.oDate, arguments);
259
+ };
260
+ });
261
+ [
262
+ 'toLocaleDateString',
263
+ 'toLocaleString',
264
+ 'toLocaleTimeString'
265
+ ].forEach(function (sMethod) {
266
+ UI5Date.prototype[sMethod] = function (sLocale, oOptions) {
267
+ return this.oDate[sMethod](sLocale || Configuration.getLanguageTag(), Object.assign({ timeZone: this.sTimezoneID }, oOptions));
268
+ };
269
+ });
270
+ [
271
+ 'setUTCDate',
272
+ 'setUTCFullYear',
273
+ 'setUTCHours',
274
+ 'setUTCMilliseconds',
275
+ 'setUTCMinutes',
276
+ 'setUTCMonth',
277
+ 'setUTCSeconds'
278
+ ].forEach(function (sMethod) {
279
+ UI5Date.prototype[sMethod] = function () {
280
+ this.oDateParts = undefined;
281
+ return this.oDate[sMethod].apply(this.oDate, arguments);
282
+ };
283
+ });
284
+ UI5Date._createDateInstance = function (vParts) {
285
+ if (vParts[0] instanceof Date) {
286
+ vParts[0] = vParts[0].valueOf();
287
+ }
288
+ return new (Function.prototype.bind.apply(Date, [].concat.apply([null], vParts)))();
289
+ };
290
+ UI5Date.getInstance = function () {
291
+ var sTimezone = Configuration.getTimezone();
292
+ if (sTimezone !== TimezoneUtil.getLocalTimezone()) {
293
+ return new UI5Date(arguments, sTimezone);
294
+ }
295
+ return UI5Date._createDateInstance(arguments);
296
+ };
297
+ UI5Date.checkDate = function (oDate) {
298
+ if (isNaN(oDate.getTime())) {
299
+ throw new Error('The given Date is not valid');
300
+ }
301
+ if (!(oDate instanceof UI5Date) && Configuration.getTimezone() !== TimezoneUtil.getLocalTimezone()) {
302
+ throw new Error('Configured time zone requires the parameter \'oDate\' to be an instance of' + ' sap.ui.core.date.UI5Date');
303
+ }
304
+ };
305
+ export default UI5Date;
@@ -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
3
  import LocaleData from '../LocaleData.js';
4
4
  import _Calendars from './_Calendars.js';
5
+ import CalendarUtils from './CalendarUtils.js';
6
+ import CalendarWeekNumbering from './CalendarWeekNumbering.js';
7
+ import UI5Date from './UI5Date.js';
5
8
  var UniversalDate = BaseObject.extend('sap.ui.core.date.UniversalDate', {
6
9
  constructor: function () {
7
10
  var clDate = UniversalDate.getClass();
@@ -16,6 +19,9 @@ UniversalDate.now = function () {
16
19
  return Date.now();
17
20
  };
18
21
  UniversalDate.prototype.createDate = function (clDate, aArgs) {
22
+ if (clDate === Date) {
23
+ return UI5Date.getInstance.apply(null, aArgs);
24
+ }
19
25
  switch (aArgs.length) {
20
26
  case 0:
21
27
  return new clDate();
@@ -39,21 +45,22 @@ UniversalDate.getInstance = function (oDate, sCalendarType) {
39
45
  var clDate, oInstance;
40
46
  if (oDate instanceof UniversalDate) {
41
47
  oDate = oDate.getJSDate();
42
- } else if (!oDate) {
43
- oDate = new Date();
48
+ }
49
+ if (oDate && isNaN(oDate.getTime())) {
50
+ throw new Error('The given date object is invalid');
44
51
  }
45
52
  if (!sCalendarType) {
46
- sCalendarType = Core.getConfiguration().getCalendarType();
53
+ sCalendarType = Configuration.getCalendarType();
47
54
  }
48
55
  clDate = UniversalDate.getClass(sCalendarType);
49
56
  oInstance = Object.create(clDate.prototype);
50
- oInstance.oDate = oDate;
57
+ oInstance.oDate = oDate ? UI5Date.getInstance(oDate) : UI5Date.getInstance();
51
58
  oInstance.sCalendarType = sCalendarType;
52
59
  return oInstance;
53
60
  };
54
61
  UniversalDate.getClass = function (sCalendarType) {
55
62
  if (!sCalendarType) {
56
- sCalendarType = Core.getConfiguration().getCalendarType();
63
+ sCalendarType = Configuration.getCalendarType();
57
64
  }
58
65
  return _Calendars.get(sCalendarType);
59
66
  };
@@ -116,18 +123,22 @@ UniversalDate.prototype.getUTCEra = function () {
116
123
  };
117
124
  UniversalDate.prototype.setUTCEra = function (iEra) {
118
125
  };
119
- UniversalDate.prototype.getWeek = function () {
120
- return UniversalDate.getWeekByDate(this.sCalendarType, this.getFullYear(), this.getMonth(), this.getDate());
126
+ UniversalDate.prototype.getWeek = function (oLocale, vCalendarWeekNumbering) {
127
+ checkWeekConfig(vCalendarWeekNumbering);
128
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.getFullYear(), this.getMonth(), this.getDate(), oLocale, vCalendarWeekNumbering);
121
129
  };
122
- UniversalDate.prototype.setWeek = function (oWeek) {
123
- var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week);
130
+ UniversalDate.prototype.setWeek = function (oWeek, oLocale, vCalendarWeekNumbering) {
131
+ checkWeekConfig(vCalendarWeekNumbering);
132
+ var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
124
133
  this.setFullYear(oDate.year, oDate.month, oDate.day);
125
134
  };
126
- UniversalDate.prototype.getUTCWeek = function () {
127
- return UniversalDate.getWeekByDate(this.sCalendarType, this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());
135
+ UniversalDate.prototype.getUTCWeek = function (oLocale, vCalendarWeekNumbering) {
136
+ checkWeekConfig(vCalendarWeekNumbering);
137
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate(), oLocale, vCalendarWeekNumbering);
128
138
  };
129
- UniversalDate.prototype.setUTCWeek = function (oWeek) {
130
- var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week);
139
+ UniversalDate.prototype.setUTCWeek = function (oWeek, oLocale, vCalendarWeekNumbering) {
140
+ checkWeekConfig(vCalendarWeekNumbering);
141
+ var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
131
142
  this.setUTCFullYear(oDate.year, oDate.month, oDate.day);
132
143
  };
133
144
  UniversalDate.prototype.getQuarter = function () {
@@ -161,15 +172,21 @@ UniversalDate.prototype.getTimezoneLong = function () {
161
172
  }
162
173
  };
163
174
  var iMillisecondsInWeek = 7 * 24 * 60 * 60 * 1000;
164
- UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay) {
165
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), clDate = this.getClass(sCalendarType), oFirstDay = getFirstDayOfFirstWeek(clDate, iYear), oDate = new clDate(clDate.UTC(iYear, iMonth, iDay)), iWeek, iLastYear, iNextYear, oLastFirstDay, oNextFirstDay;
166
- if (oLocaleData.firstDayStartsFirstWeek()) {
175
+ UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay, oLocale, vCalendarWeekNumbering) {
176
+ checkWeekConfig(vCalendarWeekNumbering);
177
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
178
+ var clDate = this.getClass(sCalendarType);
179
+ var oFirstDay = getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering);
180
+ var oDate = new clDate(clDate.UTC(iYear, iMonth, iDay));
181
+ var iWeek, iLastYear, iNextYear, oLastFirstDay, oNextFirstDay;
182
+ var bSplitWeek = isSplitWeek(vCalendarWeekNumbering, oLocale);
183
+ if (bSplitWeek) {
167
184
  iWeek = calculateWeeks(oFirstDay, oDate);
168
185
  } else {
169
186
  iLastYear = iYear - 1;
170
187
  iNextYear = iYear + 1;
171
- oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear);
172
- oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear);
188
+ oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear, oLocale, vCalendarWeekNumbering);
189
+ oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear, oLocale, vCalendarWeekNumbering);
173
190
  if (oDate >= oNextFirstDay) {
174
191
  iYear = iNextYear;
175
192
  iWeek = 0;
@@ -185,9 +202,14 @@ UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay) {
185
202
  week: iWeek
186
203
  };
187
204
  };
188
- UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek) {
189
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), clDate = this.getClass(sCalendarType), oFirstDay = getFirstDayOfFirstWeek(clDate, iYear), oDate = new clDate(oFirstDay.valueOf() + iWeek * iMillisecondsInWeek), bIsRegionUS = oLocaleData.firstDayStartsFirstWeek();
190
- if (bIsRegionUS && iWeek === 0 && oFirstDay.getUTCFullYear() < iYear) {
205
+ UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek, oLocale, vCalendarWeekNumbering) {
206
+ checkWeekConfig(vCalendarWeekNumbering);
207
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
208
+ var clDate = this.getClass(sCalendarType);
209
+ var oFirstDay = getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering);
210
+ var oDate = new clDate(oFirstDay.valueOf() + iWeek * iMillisecondsInWeek);
211
+ var bSplitWeek = isSplitWeek(vCalendarWeekNumbering, oLocale);
212
+ if (bSplitWeek && iWeek === 0 && oFirstDay.getUTCFullYear() < iYear) {
191
213
  return {
192
214
  year: iYear,
193
215
  month: 0,
@@ -200,8 +222,44 @@ UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek) {
200
222
  day: oDate.getUTCDate()
201
223
  };
202
224
  };
203
- function getFirstDayOfFirstWeek(clDate, iYear) {
204
- 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;
225
+ function isSplitWeek(vCalendarWeekNumbering, oLocale) {
226
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
227
+ var oLocaleData = LocaleData.getInstance(oLocale);
228
+ return (!isCalendarWeekConfigurationDefined(vCalendarWeekNumbering) || vCalendarWeekNumbering === CalendarWeekNumbering.Default) && oLocaleData.firstDayStartsFirstWeek();
229
+ }
230
+ function checkWeekConfig(vCalendarWeekNumbering) {
231
+ if (typeof vCalendarWeekNumbering === 'object') {
232
+ if (!isCalendarWeekConfigurationDefined(vCalendarWeekNumbering)) {
233
+ throw new TypeError('Week config requires firstDayOfWeek and minimalDaysInFirstWeek to be set');
234
+ }
235
+ } else if (vCalendarWeekNumbering && !Object.values(CalendarWeekNumbering).includes(vCalendarWeekNumbering)) {
236
+ throw new TypeError('Illegal format option calendarWeekNumbering: \'' + vCalendarWeekNumbering + '\'');
237
+ }
238
+ }
239
+ function isCalendarWeekConfigurationDefined(vCalendarWeekNumbering) {
240
+ if (typeof vCalendarWeekNumbering === 'object') {
241
+ return typeof vCalendarWeekNumbering.firstDayOfWeek === 'number' && typeof vCalendarWeekNumbering.minimalDaysInFirstWeek === 'number';
242
+ } else if (vCalendarWeekNumbering) {
243
+ return true;
244
+ }
245
+ return false;
246
+ }
247
+ function resolveCalendarWeekConfiguration(vCalendarWeekNumbering, oLocale) {
248
+ if (typeof vCalendarWeekNumbering === 'object' && typeof vCalendarWeekNumbering.firstDayOfWeek === 'number' && typeof vCalendarWeekNumbering.minimalDaysInFirstWeek === 'number') {
249
+ return vCalendarWeekNumbering;
250
+ }
251
+ return CalendarUtils.getWeekConfigurationValues(vCalendarWeekNumbering, oLocale);
252
+ }
253
+ function getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering) {
254
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
255
+ var oWeekConfig = resolveCalendarWeekConfiguration(vCalendarWeekNumbering, oLocale);
256
+ var iMinDays = oWeekConfig.minimalDaysInFirstWeek;
257
+ var iFirstDayOfWeek = oWeekConfig.firstDayOfWeek;
258
+ var oFirstDay = new clDate(clDate.UTC(iYear, 0, 1));
259
+ var iDayCount = 7;
260
+ if (isNaN(oFirstDay.getTime())) {
261
+ throw new Error('Could not determine the first day of the week, because the date ' + 'object is invalid');
262
+ }
205
263
  while (oFirstDay.getUTCDay() !== iFirstDayOfWeek) {
206
264
  oFirstDay.setUTCDate(oFirstDay.getUTCDate() - 1);
207
265
  iDayCount--;
@@ -231,7 +289,7 @@ UniversalDate.getEraByDate = function (sCalendarType, iYear, iMonth, iDay) {
231
289
  }
232
290
  };
233
291
  UniversalDate.getCurrentEra = function (sCalendarType) {
234
- var oNow = new Date();
292
+ var oNow = UI5Date.getInstance();
235
293
  return this.getEraByDate(sCalendarType, oNow.getFullYear(), oNow.getMonth(), oNow.getDate());
236
294
  };
237
295
  UniversalDate.getEraStartDate = function (sCalendarType, iEra) {
@@ -241,7 +299,7 @@ UniversalDate.getEraStartDate = function (sCalendarType, iEra) {
241
299
  }
242
300
  };
243
301
  function getEras(sCalendarType) {
244
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), aEras = mEras[sCalendarType];
302
+ var oLocale = Configuration.getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), aEras = mEras[sCalendarType];
245
303
  if (!aEras) {
246
304
  var aEras = oLocaleData.getEraDates(sCalendarType);
247
305
  if (!aEras[0]) {