@ui5/webcomponents-localization 0.0.0-cf50976ce → 0.0.0-d1315d658

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 (199) hide show
  1. package/.eslintignore +1 -1
  2. package/.npsrc.json +3 -0
  3. package/CHANGELOG.md +343 -0
  4. package/{src/Assets-static.js → dist/Assets-static.d.ts} +0 -1
  5. package/dist/Assets-static.js +1 -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 +43 -0
  17. package/dist/dates/CalendarDate.js +171 -207
  18. package/dist/dates/CalendarDate.js.map +1 -0
  19. package/dist/dates/ExtremeDates.d.ts +5 -0
  20. package/dist/dates/ExtremeDates.js +25 -35
  21. package/dist/dates/ExtremeDates.js.map +1 -0
  22. package/dist/dates/UI5Date.d.ts +6 -0
  23. package/dist/dates/UI5Date.js +7 -0
  24. package/dist/dates/UI5Date.js.map +1 -0
  25. package/dist/dates/UniversalDate.d.ts +47 -0
  26. package/dist/dates/UniversalDate.js +5 -0
  27. package/dist/dates/UniversalDate.js.map +1 -0
  28. package/dist/dates/calculateWeekNumber.d.ts +5 -0
  29. package/dist/dates/calculateWeekNumber.js +42 -48
  30. package/dist/dates/calculateWeekNumber.js.map +1 -0
  31. package/dist/dates/convertMonthNumbersToMonthNames.d.ts +16 -0
  32. package/dist/dates/convertMonthNumbersToMonthNames.js +15 -18
  33. package/dist/dates/convertMonthNumbersToMonthNames.js.map +1 -0
  34. package/dist/dates/getDaysInMonth.d.ts +3 -0
  35. package/dist/dates/getDaysInMonth.js +7 -8
  36. package/dist/dates/getDaysInMonth.js.map +1 -0
  37. package/dist/dates/getRoundedTimestamp.d.ts +7 -0
  38. package/dist/dates/getRoundedTimestamp.js +10 -9
  39. package/dist/dates/getRoundedTimestamp.js.map +1 -0
  40. package/dist/dates/getTodayUTCTimestamp.d.ts +7 -0
  41. package/dist/dates/getTodayUTCTimestamp.js +3 -3
  42. package/dist/dates/getTodayUTCTimestamp.js.map +1 -0
  43. package/dist/dates/modifyDateBy.d.ts +14 -0
  44. package/dist/dates/modifyDateBy.js +42 -29
  45. package/dist/dates/modifyDateBy.js.map +1 -0
  46. package/dist/dates/transformDateToSecondaryType.d.ts +7 -0
  47. package/dist/dates/transformDateToSecondaryType.js +13 -15
  48. package/dist/dates/transformDateToSecondaryType.js.map +1 -0
  49. package/dist/features/calendar/Buddhist.js +1 -0
  50. package/dist/features/calendar/Buddhist.js.map +1 -0
  51. package/dist/features/calendar/Gregorian.js +1 -0
  52. package/dist/features/calendar/Gregorian.js.map +1 -0
  53. package/dist/features/calendar/Islamic.js +1 -0
  54. package/dist/features/calendar/Islamic.js.map +1 -0
  55. package/dist/features/calendar/Japanese.js +1 -0
  56. package/dist/features/calendar/Japanese.js.map +1 -0
  57. package/dist/features/calendar/Persian.js +1 -0
  58. package/dist/features/calendar/Persian.js.map +1 -0
  59. package/dist/generated/assets/cldr/ar.json +5531 -5906
  60. package/dist/generated/assets/cldr/ar_EG.json +5531 -5906
  61. package/dist/generated/assets/cldr/ar_SA.json +5530 -5906
  62. package/dist/generated/assets/cldr/bg.json +4452 -4979
  63. package/dist/generated/assets/cldr/ca.json +4440 -4996
  64. package/dist/generated/assets/cldr/cs.json +4960 -5498
  65. package/dist/generated/assets/cldr/cy.json +5211 -5884
  66. package/dist/generated/assets/cldr/da.json +4308 -4888
  67. package/dist/generated/assets/cldr/de.json +4313 -4916
  68. package/dist/generated/assets/cldr/de_AT.json +4314 -4917
  69. package/dist/generated/assets/cldr/de_CH.json +4312 -4915
  70. package/dist/generated/assets/cldr/el.json +4281 -4883
  71. package/dist/generated/assets/cldr/el_CY.json +4281 -4883
  72. package/dist/generated/assets/cldr/en.json +4316 -4971
  73. package/dist/generated/assets/cldr/en_AU.json +4319 -4962
  74. package/dist/generated/assets/cldr/en_GB.json +4329 -4971
  75. package/dist/generated/assets/cldr/en_HK.json +4337 -4977
  76. package/dist/generated/assets/cldr/en_IE.json +4328 -4971
  77. package/dist/generated/assets/cldr/en_IN.json +4333 -4972
  78. package/dist/generated/assets/cldr/en_NZ.json +4328 -4971
  79. package/dist/generated/assets/cldr/en_PG.json +4329 -4972
  80. package/dist/generated/assets/cldr/en_SG.json +4333 -4973
  81. package/dist/generated/assets/cldr/en_ZA.json +4329 -4972
  82. package/dist/generated/assets/cldr/es.json +4331 -4912
  83. package/dist/generated/assets/cldr/es_AR.json +4334 -4914
  84. package/dist/generated/assets/cldr/es_BO.json +4333 -4913
  85. package/dist/generated/assets/cldr/es_CL.json +4334 -4914
  86. package/dist/generated/assets/cldr/es_CO.json +4333 -4913
  87. package/dist/generated/assets/cldr/es_MX.json +4335 -4915
  88. package/dist/generated/assets/cldr/es_PE.json +4333 -4913
  89. package/dist/generated/assets/cldr/es_UY.json +4335 -4915
  90. package/dist/generated/assets/cldr/es_VE.json +4334 -4914
  91. package/dist/generated/assets/cldr/et.json +4340 -4967
  92. package/dist/generated/assets/cldr/fa.json +4367 -4883
  93. package/dist/generated/assets/cldr/fi.json +4463 -5008
  94. package/dist/generated/assets/cldr/fr.json +4357 -4979
  95. package/dist/generated/assets/cldr/fr_BE.json +4357 -4979
  96. package/dist/generated/assets/cldr/fr_CA.json +4351 -4973
  97. package/dist/generated/assets/cldr/fr_CH.json +4375 -4997
  98. package/dist/generated/assets/cldr/fr_LU.json +4357 -4979
  99. package/dist/generated/assets/cldr/he.json +4869 -5378
  100. package/dist/generated/assets/cldr/hi.json +4295 -4829
  101. package/dist/generated/assets/cldr/hr.json +4583 -4919
  102. package/dist/generated/assets/cldr/hu.json +4364 -4856
  103. package/dist/generated/assets/cldr/id.json +4060 -4658
  104. package/dist/generated/assets/cldr/it.json +4299 -4950
  105. package/dist/generated/assets/cldr/it_CH.json +4299 -4950
  106. package/dist/generated/assets/cldr/ja.json +4211 -4830
  107. package/dist/generated/assets/cldr/kk.json +4339 -4725
  108. package/dist/generated/assets/cldr/ko.json +4189 -4738
  109. package/dist/generated/assets/cldr/lt.json +4850 -5481
  110. package/dist/generated/assets/cldr/lv.json +4587 -5112
  111. package/dist/generated/assets/cldr/ms.json +4021 -4515
  112. package/dist/generated/assets/cldr/nb.json +4335 -4977
  113. package/dist/generated/assets/cldr/nl.json +4294 -4884
  114. package/dist/generated/assets/cldr/nl_BE.json +4294 -4884
  115. package/dist/generated/assets/cldr/pl.json +4667 -5176
  116. package/dist/generated/assets/cldr/pt.json +4235 -4805
  117. package/dist/generated/assets/cldr/pt_PT.json +4372 -4940
  118. package/dist/generated/assets/cldr/ro.json +4563 -5090
  119. package/dist/generated/assets/cldr/ru.json +4909 -5407
  120. package/dist/generated/assets/cldr/ru_UA.json +4909 -5407
  121. package/dist/generated/assets/cldr/sk.json +4939 -5370
  122. package/dist/generated/assets/cldr/sl.json +4910 -5340
  123. package/dist/generated/assets/cldr/sr.json +4585 -5126
  124. package/dist/generated/assets/cldr/sr_Latn.json +4574 -5127
  125. package/dist/generated/assets/cldr/sv.json +4362 -5011
  126. package/dist/generated/assets/cldr/th.json +4214 -4797
  127. package/dist/generated/assets/cldr/tr.json +4400 -4979
  128. package/dist/generated/assets/cldr/uk.json +4858 -5353
  129. package/dist/generated/assets/cldr/vi.json +4070 -4673
  130. package/dist/generated/assets/cldr/zh_CN.json +4100 -4632
  131. package/dist/generated/assets/cldr/zh_HK.json +4108 -4640
  132. package/dist/generated/assets/cldr/zh_SG.json +4108 -4640
  133. package/dist/generated/assets/cldr/zh_TW.json +4131 -4728
  134. package/dist/getCachedLocaleDataInstance.d.ts +4 -0
  135. package/dist/getCachedLocaleDataInstance.js +6 -9
  136. package/dist/getCachedLocaleDataInstance.js.map +1 -0
  137. package/dist/locale/getLocaleData.d.ts +11 -0
  138. package/dist/locale/getLocaleData.js +12 -16
  139. package/dist/locale/getLocaleData.js.map +1 -0
  140. package/dist/sap/base/Log.js +28 -29
  141. package/dist/sap/base/assert.js +5 -6
  142. package/dist/sap/base/i18n/LanguageTag.js +35 -0
  143. package/dist/sap/base/i18n/Localization.d.ts +4 -0
  144. package/dist/sap/base/i18n/Localization.js +12 -0
  145. package/dist/sap/base/i18n/Localization.js.map +1 -0
  146. package/dist/sap/base/i18n/date/CalendarType.js +8 -0
  147. package/dist/sap/base/i18n/date/CalendarWeekNumbering.js +30 -0
  148. package/dist/sap/base/i18n/date/TimezoneUtils.js +89 -0
  149. package/dist/sap/base/util/LoaderExtensions.d.ts +4 -0
  150. package/dist/sap/base/util/LoaderExtensions.js +9 -12
  151. package/dist/sap/base/util/LoaderExtensions.js.map +1 -0
  152. package/dist/sap/ui/base/Metadata.js +20 -9
  153. package/dist/sap/ui/core/CalendarType.js +2 -8
  154. package/dist/sap/ui/core/Configuration.d.ts +17 -0
  155. package/dist/sap/ui/core/Configuration.js +21 -0
  156. package/dist/sap/ui/core/Configuration.js.map +1 -0
  157. package/dist/sap/ui/core/Core.d.ts +26 -0
  158. package/dist/sap/ui/core/Core.js +7 -34
  159. package/dist/sap/ui/core/Core.js.map +1 -0
  160. package/dist/sap/ui/core/FormatSettings.d.ts +10 -0
  161. package/dist/sap/ui/core/FormatSettings.js +14 -0
  162. package/dist/sap/ui/core/FormatSettings.js.map +1 -0
  163. package/dist/sap/ui/core/Locale.js +28 -122
  164. package/dist/sap/ui/core/LocaleData.js +185 -38
  165. package/dist/sap/ui/core/date/Buddhist.js +0 -6
  166. package/dist/sap/ui/core/date/CalendarUtils.js +25 -0
  167. package/dist/sap/ui/core/date/CalendarWeekNumbering.js +2 -0
  168. package/dist/sap/ui/core/date/Islamic.js +3 -3
  169. package/dist/sap/ui/core/date/Japanese.js +4 -4
  170. package/dist/sap/ui/core/date/UI5Date.js +305 -0
  171. package/dist/sap/ui/core/date/UniversalDate.js +68 -27
  172. package/dist/sap/ui/core/format/DateFormat.js +539 -383
  173. package/dist/sap/ui/core/format/TimezoneUtil.js +2 -83
  174. package/{package-scripts.js → package-scripts.cjs} +7 -5
  175. package/package.json +7 -5
  176. package/tsconfig.json +14 -0
  177. package/used-modules.txt +8 -1
  178. package/src/Assets.js +0 -2
  179. package/src/DateFormat.js +0 -3
  180. package/src/LocaleData.js +0 -3
  181. package/src/dates/CalendarDate.js +0 -229
  182. package/src/dates/ExtremeDates.js +0 -39
  183. package/src/dates/calculateWeekNumber.js +0 -51
  184. package/src/dates/convertMonthNumbersToMonthNames.js +0 -33
  185. package/src/dates/getDaysInMonth.js +0 -11
  186. package/src/dates/getRoundedTimestamp.js +0 -14
  187. package/src/dates/getTodayUTCTimestamp.js +0 -9
  188. package/src/dates/modifyDateBy.js +0 -42
  189. package/src/dates/transformDateToSecondaryType.js +0 -20
  190. package/src/getCachedLocaleDataInstance.js +0 -13
  191. package/src/locale/getLocaleData.js +0 -27
  192. package/src/sap/base/util/LoaderExtensions.js +0 -17
  193. package/src/sap/ui/core/Core.js +0 -40
  194. /package/{config/.eslintrc.js → .eslintrc.cjs} +0 -0
  195. /package/{src/features/calendar/Buddhist.js → dist/features/calendar/Buddhist.d.ts} +0 -0
  196. /package/{src/features/calendar/Gregorian.js → dist/features/calendar/Gregorian.d.ts} +0 -0
  197. /package/{src/features/calendar/Islamic.js → dist/features/calendar/Islamic.d.ts} +0 -0
  198. /package/{src/features/calendar/Japanese.js → dist/features/calendar/Japanese.d.ts} +0 -0
  199. /package/{src/features/calendar/Persian.js → dist/features/calendar/Persian.d.ts} +0 -0
@@ -0,0 +1,25 @@
1
+ import CalendarWeekNumbering from './CalendarWeekNumbering.js';
2
+ import Configuration from '../Configuration.js';
3
+ import LocaleData from '../LocaleData.js';
4
+ var CalendarUtils = {
5
+ getWeekConfigurationValues: function (sCalendarWeekNumbering, oLocale) {
6
+ var oLocaleData, oWeekConfigurationValues;
7
+ if (!sCalendarWeekNumbering) {
8
+ return CalendarUtils.getWeekConfigurationValues(Configuration.getCalendarWeekNumbering(), oLocale);
9
+ }
10
+ oWeekConfigurationValues = CalendarWeekNumbering.getWeekConfigurationValues(sCalendarWeekNumbering);
11
+ if (oWeekConfigurationValues) {
12
+ return oWeekConfigurationValues;
13
+ }
14
+ if (sCalendarWeekNumbering === CalendarWeekNumbering.Default) {
15
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
16
+ oLocaleData = LocaleData.getInstance(oLocale);
17
+ return {
18
+ firstDayOfWeek: oLocaleData.getFirstDayOfWeek(),
19
+ minimalDaysInFirstWeek: oLocaleData.getMinimalDaysInFirstWeek()
20
+ };
21
+ }
22
+ return undefined;
23
+ }
24
+ };
25
+ export default CalendarUtils;
@@ -0,0 +1,2 @@
1
+ import CalendarWeekNumbering from '../../../base/i18n/date/CalendarWeekNumbering.js';
2
+ 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;
@@ -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,24 +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();
44
48
  }
45
- if (isNaN(oDate.getTime())) {
49
+ if (oDate && isNaN(oDate.getTime())) {
46
50
  throw new Error('The given date object is invalid');
47
51
  }
48
52
  if (!sCalendarType) {
49
- sCalendarType = Core.getConfiguration().getCalendarType();
53
+ sCalendarType = Configuration.getCalendarType();
50
54
  }
51
55
  clDate = UniversalDate.getClass(sCalendarType);
52
56
  oInstance = Object.create(clDate.prototype);
53
- oInstance.oDate = oDate;
57
+ oInstance.oDate = oDate ? UI5Date.getInstance(oDate) : UI5Date.getInstance();
54
58
  oInstance.sCalendarType = sCalendarType;
55
59
  return oInstance;
56
60
  };
57
61
  UniversalDate.getClass = function (sCalendarType) {
58
62
  if (!sCalendarType) {
59
- sCalendarType = Core.getConfiguration().getCalendarType();
63
+ sCalendarType = Configuration.getCalendarType();
60
64
  }
61
65
  return _Calendars.get(sCalendarType);
62
66
  };
@@ -119,18 +123,18 @@ UniversalDate.prototype.getUTCEra = function () {
119
123
  };
120
124
  UniversalDate.prototype.setUTCEra = function (iEra) {
121
125
  };
122
- UniversalDate.prototype.getWeek = function () {
123
- return UniversalDate.getWeekByDate(this.sCalendarType, this.getFullYear(), this.getMonth(), this.getDate());
126
+ UniversalDate.prototype.getWeek = function (oLocale, vCalendarWeekNumbering) {
127
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.getFullYear(), this.getMonth(), this.getDate(), oLocale, vCalendarWeekNumbering);
124
128
  };
125
- UniversalDate.prototype.setWeek = function (oWeek) {
126
- var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week);
129
+ UniversalDate.prototype.setWeek = function (oWeek, oLocale, vCalendarWeekNumbering) {
130
+ var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
127
131
  this.setFullYear(oDate.year, oDate.month, oDate.day);
128
132
  };
129
- UniversalDate.prototype.getUTCWeek = function () {
130
- return UniversalDate.getWeekByDate(this.sCalendarType, this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());
133
+ UniversalDate.prototype.getUTCWeek = function (oLocale, vCalendarWeekNumbering) {
134
+ return UniversalDate.getWeekByDate(this.sCalendarType, this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate(), oLocale, vCalendarWeekNumbering);
131
135
  };
132
- UniversalDate.prototype.setUTCWeek = function (oWeek) {
133
- var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week);
136
+ UniversalDate.prototype.setUTCWeek = function (oWeek, oLocale, vCalendarWeekNumbering) {
137
+ var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
134
138
  this.setUTCFullYear(oDate.year, oDate.month, oDate.day);
135
139
  };
136
140
  UniversalDate.prototype.getQuarter = function () {
@@ -164,15 +168,22 @@ UniversalDate.prototype.getTimezoneLong = function () {
164
168
  }
165
169
  };
166
170
  var iMillisecondsInWeek = 7 * 24 * 60 * 60 * 1000;
167
- UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay) {
168
- 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;
169
- if (oLocaleData.firstDayStartsFirstWeek()) {
171
+ UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay, oLocale, vCalendarWeekNumbering) {
172
+ vCalendarWeekNumbering = vCalendarWeekNumbering || Configuration.getCalendarWeekNumbering();
173
+ checkWeekConfig(vCalendarWeekNumbering);
174
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
175
+ var clDate = this.getClass(sCalendarType);
176
+ var oFirstDay = getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering);
177
+ var oDate = new clDate(clDate.UTC(iYear, iMonth, iDay));
178
+ var iWeek, iLastYear, iNextYear, oLastFirstDay, oNextFirstDay;
179
+ var bSplitWeek = isSplitWeek(vCalendarWeekNumbering, oLocale);
180
+ if (bSplitWeek) {
170
181
  iWeek = calculateWeeks(oFirstDay, oDate);
171
182
  } else {
172
183
  iLastYear = iYear - 1;
173
184
  iNextYear = iYear + 1;
174
- oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear);
175
- oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear);
185
+ oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear, oLocale, vCalendarWeekNumbering);
186
+ oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear, oLocale, vCalendarWeekNumbering);
176
187
  if (oDate >= oNextFirstDay) {
177
188
  iYear = iNextYear;
178
189
  iWeek = 0;
@@ -188,9 +199,15 @@ UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay) {
188
199
  week: iWeek
189
200
  };
190
201
  };
191
- UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek) {
192
- 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();
193
- if (bIsRegionUS && iWeek === 0 && oFirstDay.getUTCFullYear() < iYear) {
202
+ UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek, oLocale, vCalendarWeekNumbering) {
203
+ vCalendarWeekNumbering = vCalendarWeekNumbering || Configuration.getCalendarWeekNumbering();
204
+ checkWeekConfig(vCalendarWeekNumbering);
205
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
206
+ var clDate = this.getClass(sCalendarType);
207
+ var oFirstDay = getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering);
208
+ var oDate = new clDate(oFirstDay.valueOf() + iWeek * iMillisecondsInWeek);
209
+ var bSplitWeek = isSplitWeek(vCalendarWeekNumbering, oLocale);
210
+ if (bSplitWeek && iWeek === 0 && oFirstDay.getUTCFullYear() < iYear) {
194
211
  return {
195
212
  year: iYear,
196
213
  month: 0,
@@ -203,8 +220,32 @@ UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek) {
203
220
  day: oDate.getUTCDate()
204
221
  };
205
222
  };
206
- function getFirstDayOfFirstWeek(clDate, iYear) {
207
- 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;
223
+ function isSplitWeek(vCalendarWeekNumbering, oLocale) {
224
+ var oLocaleData = LocaleData.getInstance(oLocale);
225
+ return (vCalendarWeekNumbering === CalendarWeekNumbering.Default || vCalendarWeekNumbering === CalendarWeekNumbering.WesternTraditional) && oLocaleData.firstDayStartsFirstWeek();
226
+ }
227
+ function checkWeekConfig(vCalendarWeekNumbering) {
228
+ if (typeof vCalendarWeekNumbering === 'object') {
229
+ if (typeof vCalendarWeekNumbering.firstDayOfWeek !== 'number' || typeof vCalendarWeekNumbering.minimalDaysInFirstWeek !== 'number') {
230
+ throw new TypeError('Week config requires firstDayOfWeek and minimalDaysInFirstWeek to be set');
231
+ }
232
+ } else if (!Object.values(CalendarWeekNumbering).includes(vCalendarWeekNumbering)) {
233
+ throw new TypeError('Illegal format option calendarWeekNumbering: \'' + vCalendarWeekNumbering + '\'');
234
+ }
235
+ }
236
+ function resolveCalendarWeekConfiguration(vCalendarWeekNumbering, oLocale) {
237
+ if (typeof vCalendarWeekNumbering === 'object' && typeof vCalendarWeekNumbering.firstDayOfWeek === 'number' && typeof vCalendarWeekNumbering.minimalDaysInFirstWeek === 'number') {
238
+ return vCalendarWeekNumbering;
239
+ }
240
+ return CalendarUtils.getWeekConfigurationValues(vCalendarWeekNumbering, oLocale);
241
+ }
242
+ function getFirstDayOfFirstWeek(clDate, iYear, oLocale, vCalendarWeekNumbering) {
243
+ oLocale = oLocale || Configuration.getFormatSettings().getFormatLocale();
244
+ var oWeekConfig = resolveCalendarWeekConfiguration(vCalendarWeekNumbering, oLocale);
245
+ var iMinDays = oWeekConfig.minimalDaysInFirstWeek;
246
+ var iFirstDayOfWeek = oWeekConfig.firstDayOfWeek;
247
+ var oFirstDay = new clDate(clDate.UTC(iYear, 0, 1));
248
+ var iDayCount = 7;
208
249
  if (isNaN(oFirstDay.getTime())) {
209
250
  throw new Error('Could not determine the first day of the week, because the date ' + 'object is invalid');
210
251
  }
@@ -237,7 +278,7 @@ UniversalDate.getEraByDate = function (sCalendarType, iYear, iMonth, iDay) {
237
278
  }
238
279
  };
239
280
  UniversalDate.getCurrentEra = function (sCalendarType) {
240
- var oNow = new Date();
281
+ var oNow = UI5Date.getInstance();
241
282
  return this.getEraByDate(sCalendarType, oNow.getFullYear(), oNow.getMonth(), oNow.getDate());
242
283
  };
243
284
  UniversalDate.getEraStartDate = function (sCalendarType, iEra) {
@@ -247,7 +288,7 @@ UniversalDate.getEraStartDate = function (sCalendarType, iEra) {
247
288
  }
248
289
  };
249
290
  function getEras(sCalendarType) {
250
- var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), aEras = mEras[sCalendarType];
291
+ var oLocale = Configuration.getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), aEras = mEras[sCalendarType];
251
292
  if (!aEras) {
252
293
  var aEras = oLocaleData.getEraDates(sCalendarType);
253
294
  if (!aEras[0]) {