@ui5/webcomponents-localization 0.0.0-998083e44 → 0.0.0-99b763015

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 (184) hide show
  1. package/.eslintrc.js +3 -0
  2. package/CHANGELOG.md +170 -0
  3. package/{src/Assets-static.js → dist/Assets-static.d.ts} +0 -1
  4. package/dist/Assets-static.js +1 -0
  5. package/dist/Assets-static.js.map +1 -0
  6. package/dist/Assets.d.ts +1 -0
  7. package/dist/Assets.js +1 -0
  8. package/dist/Assets.js.map +1 -0
  9. package/dist/DateFormat.d.ts +6 -0
  10. package/dist/DateFormat.js +6 -2
  11. package/dist/DateFormat.js.map +1 -0
  12. package/dist/LocaleData.d.ts +6 -0
  13. package/dist/LocaleData.js +6 -2
  14. package/dist/LocaleData.js.map +1 -0
  15. package/dist/dates/CalendarDate.d.ts +41 -0
  16. package/dist/dates/CalendarDate.js +170 -207
  17. package/dist/dates/CalendarDate.js.map +1 -0
  18. package/dist/dates/ExtremeDates.d.ts +5 -0
  19. package/dist/dates/ExtremeDates.js +25 -35
  20. package/dist/dates/ExtremeDates.js.map +1 -0
  21. package/dist/dates/UniversalDate.d.ts +46 -0
  22. package/dist/dates/UniversalDate.js +5 -0
  23. package/dist/dates/UniversalDate.js.map +1 -0
  24. package/dist/dates/calculateWeekNumber.d.ts +4 -0
  25. package/dist/dates/calculateWeekNumber.js +42 -48
  26. package/dist/dates/calculateWeekNumber.js.map +1 -0
  27. package/dist/dates/convertMonthNumbersToMonthNames.d.ts +16 -0
  28. package/dist/dates/convertMonthNumbersToMonthNames.js +15 -18
  29. package/dist/dates/convertMonthNumbersToMonthNames.js.map +1 -0
  30. package/dist/dates/getDaysInMonth.d.ts +3 -0
  31. package/dist/dates/getDaysInMonth.js +7 -8
  32. package/dist/dates/getDaysInMonth.js.map +1 -0
  33. package/dist/dates/getRoundedTimestamp.d.ts +7 -0
  34. package/dist/dates/getRoundedTimestamp.js +9 -9
  35. package/dist/dates/getRoundedTimestamp.js.map +1 -0
  36. package/dist/dates/getTodayUTCTimestamp.d.ts +7 -0
  37. package/dist/dates/getTodayUTCTimestamp.js +2 -3
  38. package/dist/dates/getTodayUTCTimestamp.js.map +1 -0
  39. package/dist/dates/modifyDateBy.d.ts +13 -0
  40. package/dist/dates/modifyDateBy.js +27 -29
  41. package/dist/dates/modifyDateBy.js.map +1 -0
  42. package/dist/dates/transformDateToSecondaryType.d.ts +7 -0
  43. package/dist/dates/transformDateToSecondaryType.js +12 -15
  44. package/dist/dates/transformDateToSecondaryType.js.map +1 -0
  45. package/dist/features/calendar/Buddhist.js +1 -0
  46. package/dist/features/calendar/Buddhist.js.map +1 -0
  47. package/dist/features/calendar/Gregorian.js +1 -0
  48. package/dist/features/calendar/Gregorian.js.map +1 -0
  49. package/dist/features/calendar/Islamic.js +1 -0
  50. package/dist/features/calendar/Islamic.js.map +1 -0
  51. package/dist/features/calendar/Japanese.js +1 -0
  52. package/dist/features/calendar/Japanese.js.map +1 -0
  53. package/dist/features/calendar/Persian.js +1 -0
  54. package/dist/features/calendar/Persian.js.map +1 -0
  55. package/dist/generated/assets/cldr/ar.json +2804 -5906
  56. package/dist/generated/assets/cldr/ar_EG.json +2804 -5906
  57. package/dist/generated/assets/cldr/ar_SA.json +2804 -5906
  58. package/dist/generated/assets/cldr/bg.json +2727 -4979
  59. package/dist/generated/assets/cldr/ca.json +2670 -4996
  60. package/dist/generated/assets/cldr/cs.json +2710 -5498
  61. package/dist/generated/assets/cldr/cy.json +2791 -5884
  62. package/dist/generated/assets/cldr/da.json +2591 -4888
  63. package/dist/generated/assets/cldr/de.json +2608 -4916
  64. package/dist/generated/assets/cldr/de_AT.json +2608 -4917
  65. package/dist/generated/assets/cldr/de_CH.json +2608 -4915
  66. package/dist/generated/assets/cldr/el.json +2589 -4883
  67. package/dist/generated/assets/cldr/el_CY.json +2589 -4883
  68. package/dist/generated/assets/cldr/en.json +2577 -4971
  69. package/dist/generated/assets/cldr/en_AU.json +2586 -4962
  70. package/dist/generated/assets/cldr/en_GB.json +2578 -4971
  71. package/dist/generated/assets/cldr/en_HK.json +2584 -4977
  72. package/dist/generated/assets/cldr/en_IE.json +2578 -4971
  73. package/dist/generated/assets/cldr/en_IN.json +2579 -4972
  74. package/dist/generated/assets/cldr/en_NZ.json +2578 -4971
  75. package/dist/generated/assets/cldr/en_PG.json +2578 -4972
  76. package/dist/generated/assets/cldr/en_SG.json +2579 -4973
  77. package/dist/generated/assets/cldr/en_ZA.json +2578 -4972
  78. package/dist/generated/assets/cldr/es.json +2633 -4912
  79. package/dist/generated/assets/cldr/es_AR.json +2638 -4914
  80. package/dist/generated/assets/cldr/es_BO.json +2638 -4913
  81. package/dist/generated/assets/cldr/es_CL.json +2638 -4914
  82. package/dist/generated/assets/cldr/es_CO.json +2637 -4913
  83. package/dist/generated/assets/cldr/es_MX.json +2638 -4915
  84. package/dist/generated/assets/cldr/es_PE.json +2638 -4913
  85. package/dist/generated/assets/cldr/es_UY.json +2638 -4915
  86. package/dist/generated/assets/cldr/es_VE.json +2638 -4914
  87. package/dist/generated/assets/cldr/et.json +2593 -4967
  88. package/dist/generated/assets/cldr/fa.json +2606 -4883
  89. package/dist/generated/assets/cldr/fi.json +2635 -5008
  90. package/dist/generated/assets/cldr/fr.json +2583 -4979
  91. package/dist/generated/assets/cldr/fr_BE.json +2583 -4979
  92. package/dist/generated/assets/cldr/fr_CA.json +2598 -4973
  93. package/dist/generated/assets/cldr/fr_CH.json +2600 -4997
  94. package/dist/generated/assets/cldr/fr_LU.json +2583 -4979
  95. package/dist/generated/assets/cldr/he.json +2699 -5378
  96. package/dist/generated/assets/cldr/hi.json +2593 -4829
  97. package/dist/generated/assets/cldr/hr.json +2646 -4919
  98. package/dist/generated/assets/cldr/hu.json +2592 -4856
  99. package/dist/generated/assets/cldr/id.json +2538 -4658
  100. package/dist/generated/assets/cldr/it.json +2583 -4950
  101. package/dist/generated/assets/cldr/it_CH.json +2583 -4950
  102. package/dist/generated/assets/cldr/ja.json +2655 -4830
  103. package/dist/generated/assets/cldr/kk.json +2583 -4725
  104. package/dist/generated/assets/cldr/ko.json +2632 -4738
  105. package/dist/generated/assets/cldr/lt.json +2714 -5481
  106. package/dist/generated/assets/cldr/lv.json +2638 -5112
  107. package/dist/generated/assets/cldr/ms.json +2532 -4515
  108. package/dist/generated/assets/cldr/nb.json +2615 -4977
  109. package/dist/generated/assets/cldr/nl.json +2595 -4884
  110. package/dist/generated/assets/cldr/nl_BE.json +2595 -4884
  111. package/dist/generated/assets/cldr/pl.json +2717 -5176
  112. package/dist/generated/assets/cldr/pt.json +2600 -4805
  113. package/dist/generated/assets/cldr/pt_PT.json +2651 -4940
  114. package/dist/generated/assets/cldr/ro.json +2639 -5090
  115. package/dist/generated/assets/cldr/ru.json +2698 -5407
  116. package/dist/generated/assets/cldr/ru_UA.json +2698 -5407
  117. package/dist/generated/assets/cldr/sk.json +2720 -5370
  118. package/dist/generated/assets/cldr/sl.json +2682 -5340
  119. package/dist/generated/assets/cldr/sr.json +2657 -5126
  120. package/dist/generated/assets/cldr/sr_Latn.json +2658 -5127
  121. package/dist/generated/assets/cldr/sv.json +2625 -5011
  122. package/dist/generated/assets/cldr/th.json +2626 -4797
  123. package/dist/generated/assets/cldr/tr.json +2606 -4979
  124. package/dist/generated/assets/cldr/uk.json +2678 -5353
  125. package/dist/generated/assets/cldr/vi.json +2549 -4673
  126. package/dist/generated/assets/cldr/zh_CN.json +2541 -4632
  127. package/dist/generated/assets/cldr/zh_HK.json +2549 -4640
  128. package/dist/generated/assets/cldr/zh_SG.json +2548 -4640
  129. package/dist/generated/assets/cldr/zh_TW.json +2556 -4728
  130. package/dist/getCachedLocaleDataInstance.d.ts +4 -0
  131. package/dist/getCachedLocaleDataInstance.js +6 -9
  132. package/dist/getCachedLocaleDataInstance.js.map +1 -0
  133. package/dist/locale/getLocaleData.d.ts +11 -0
  134. package/dist/locale/getLocaleData.js +13 -17
  135. package/dist/locale/getLocaleData.js.map +1 -0
  136. package/dist/sap/base/Log.js +28 -29
  137. package/dist/sap/base/assert.js +5 -6
  138. package/dist/sap/base/util/LoaderExtensions.d.ts +4 -0
  139. package/dist/sap/base/util/LoaderExtensions.js +9 -12
  140. package/dist/sap/base/util/LoaderExtensions.js.map +1 -0
  141. package/dist/sap/ui/core/Configuration.d.ts +17 -0
  142. package/dist/sap/ui/core/Configuration.js +20 -0
  143. package/dist/sap/ui/core/Configuration.js.map +1 -0
  144. package/dist/sap/ui/core/Core.d.ts +26 -0
  145. package/dist/sap/ui/core/Core.js +7 -34
  146. package/dist/sap/ui/core/Core.js.map +1 -0
  147. package/dist/sap/ui/core/FormatSettings.d.ts +10 -0
  148. package/dist/sap/ui/core/FormatSettings.js +14 -0
  149. package/dist/sap/ui/core/FormatSettings.js.map +1 -0
  150. package/dist/sap/ui/core/Locale.js +3 -0
  151. package/dist/sap/ui/core/LocaleData.js +78 -3
  152. package/dist/sap/ui/core/date/Buddhist.js +0 -6
  153. package/dist/sap/ui/core/date/CalendarUtils.js +36 -0
  154. package/dist/sap/ui/core/date/CalendarWeekNumbering.js +7 -0
  155. package/dist/sap/ui/core/date/Islamic.js +3 -3
  156. package/dist/sap/ui/core/date/Japanese.js +4 -4
  157. package/dist/sap/ui/core/date/UniversalDate.js +73 -22
  158. package/dist/sap/ui/core/format/DateFormat.js +157 -57
  159. package/dist/sap/ui/core/format/TimezoneUtil.js +12 -1
  160. package/package-scripts.js +7 -4
  161. package/package.json +6 -5
  162. package/tsconfig.json +14 -0
  163. package/used-modules.txt +3 -1
  164. package/src/Assets.js +0 -2
  165. package/src/DateFormat.js +0 -3
  166. package/src/LocaleData.js +0 -3
  167. package/src/dates/CalendarDate.js +0 -229
  168. package/src/dates/ExtremeDates.js +0 -39
  169. package/src/dates/calculateWeekNumber.js +0 -51
  170. package/src/dates/convertMonthNumbersToMonthNames.js +0 -33
  171. package/src/dates/getDaysInMonth.js +0 -11
  172. package/src/dates/getRoundedTimestamp.js +0 -14
  173. package/src/dates/getTodayUTCTimestamp.js +0 -9
  174. package/src/dates/modifyDateBy.js +0 -42
  175. package/src/dates/transformDateToSecondaryType.js +0 -20
  176. package/src/getCachedLocaleDataInstance.js +0 -13
  177. package/src/locale/getLocaleData.js +0 -27
  178. package/src/sap/base/util/LoaderExtensions.js +0 -17
  179. package/src/sap/ui/core/Core.js +0 -40
  180. /package/{src/features/calendar/Buddhist.js → dist/features/calendar/Buddhist.d.ts} +0 -0
  181. /package/{src/features/calendar/Gregorian.js → dist/features/calendar/Gregorian.d.ts} +0 -0
  182. /package/{src/features/calendar/Islamic.js → dist/features/calendar/Islamic.d.ts} +0 -0
  183. /package/{src/features/calendar/Japanese.js → dist/features/calendar/Japanese.d.ts} +0 -0
  184. /package/{src/features/calendar/Persian.js → dist/features/calendar/Persian.d.ts} +0 -0
@@ -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();
@@ -46,7 +49,7 @@ UniversalDate.getInstance = function (oDate, sCalendarType) {
46
49
  throw new Error('The given date object is invalid');
47
50
  }
48
51
  if (!sCalendarType) {
49
- sCalendarType = Core.getConfiguration().getCalendarType();
52
+ sCalendarType = Configuration.getCalendarType();
50
53
  }
51
54
  clDate = UniversalDate.getClass(sCalendarType);
52
55
  oInstance = Object.create(clDate.prototype);
@@ -56,7 +59,7 @@ UniversalDate.getInstance = function (oDate, sCalendarType) {
56
59
  };
57
60
  UniversalDate.getClass = function (sCalendarType) {
58
61
  if (!sCalendarType) {
59
- sCalendarType = Core.getConfiguration().getCalendarType();
62
+ sCalendarType = Configuration.getCalendarType();
60
63
  }
61
64
  return _Calendars.get(sCalendarType);
62
65
  };
@@ -119,18 +122,22 @@ UniversalDate.prototype.getUTCEra = function () {
119
122
  };
120
123
  UniversalDate.prototype.setUTCEra = function (iEra) {
121
124
  };
122
- UniversalDate.prototype.getWeek = function () {
123
- 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);
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
+ checkWeekConfig(vCalendarWeekNumbering);
131
+ var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week, oLocale, vCalendarWeekNumbering);
127
132
  this.setFullYear(oDate.year, oDate.month, oDate.day);
128
133
  };
129
- UniversalDate.prototype.getUTCWeek = function () {
130
- 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);
131
137
  };
132
- UniversalDate.prototype.setUTCWeek = function (oWeek) {
133
- 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);
134
141
  this.setUTCFullYear(oDate.year, oDate.month, oDate.day);
135
142
  };
136
143
  UniversalDate.prototype.getQuarter = function () {
@@ -164,15 +171,21 @@ UniversalDate.prototype.getTimezoneLong = function () {
164
171
  }
165
172
  };
166
173
  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()) {
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) {
170
183
  iWeek = calculateWeeks(oFirstDay, oDate);
171
184
  } else {
172
185
  iLastYear = iYear - 1;
173
186
  iNextYear = iYear + 1;
174
- oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear);
175
- oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear);
187
+ oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear, oLocale, vCalendarWeekNumbering);
188
+ oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear, oLocale, vCalendarWeekNumbering);
176
189
  if (oDate >= oNextFirstDay) {
177
190
  iYear = iNextYear;
178
191
  iWeek = 0;
@@ -188,9 +201,14 @@ UniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay) {
188
201
  week: iWeek
189
202
  };
190
203
  };
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) {
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) {
194
212
  return {
195
213
  year: iYear,
196
214
  month: 0,
@@ -203,8 +221,41 @@ UniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek) {
203
221
  day: oDate.getUTCDate()
204
222
  };
205
223
  };
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;
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;
208
259
  if (isNaN(oFirstDay.getTime())) {
209
260
  throw new Error('Could not determine the first day of the week, because the date ' + 'object is invalid');
210
261
  }
@@ -247,7 +298,7 @@ UniversalDate.getEraStartDate = function (sCalendarType, iEra) {
247
298
  }
248
299
  };
249
300
  function getEras(sCalendarType) {
250
- 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];
251
302
  if (!aEras) {
252
303
  var aEras = oLocaleData.getEraDates(sCalendarType);
253
304
  if (!aEras[0]) {
@@ -1,13 +1,15 @@
1
- import Core from '../Core.js';
2
1
  import CalendarType from '../CalendarType.js';
3
2
  import Locale from '../Locale.js';
4
3
  import LocaleData from '../LocaleData.js';
5
4
  import UniversalDate from '../date/UniversalDate.js';
5
+ import CalendarUtils from '../date/CalendarUtils.js';
6
+ import CalendarWeekNumbering from '../date/CalendarWeekNumbering.js';
6
7
  import TimezoneUtil from './TimezoneUtil.js';
7
8
  import deepEqual from '../../../base/util/deepEqual.js';
8
9
  import formatMessage from '../../../base/strings/formatMessage.js';
9
10
  import Log from '../../../base/Log.js';
10
11
  import extend from '../../../base/util/extend.js';
12
+ import Configuration from '../Configuration.js';
11
13
  var DateFormat = function () {
12
14
  throw new Error();
13
15
  };
@@ -263,7 +265,7 @@ DateFormat.createInstance = function (oFormatOptions, oLocale, oInfo) {
263
265
  oFormatOptions = undefined;
264
266
  }
265
267
  if (!oLocale) {
266
- oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale();
268
+ oLocale = Configuration.getFormatSettings().getFormatLocale();
267
269
  }
268
270
  oFormat.oLocale = oLocale;
269
271
  oFormat.oLocaleData = LocaleData.getInstance(oLocale);
@@ -279,7 +281,13 @@ DateFormat.createInstance = function (oFormatOptions, oLocale, oInfo) {
279
281
  }
280
282
  oFormat.type = oInfo.type;
281
283
  if (!oFormat.oFormatOptions.calendarType) {
282
- oFormat.oFormatOptions.calendarType = Core.getConfiguration().getCalendarType();
284
+ oFormat.oFormatOptions.calendarType = Configuration.getCalendarType();
285
+ }
286
+ if (oFormat.oFormatOptions.firstDayOfWeek === undefined && oFormat.oFormatOptions.minimalDaysInFirstWeek !== undefined || oFormat.oFormatOptions.firstDayOfWeek !== undefined && oFormat.oFormatOptions.minimalDaysInFirstWeek === undefined) {
287
+ throw new TypeError('Format options firstDayOfWeek and minimalDaysInFirstWeek need both to be set, but only one was provided.');
288
+ }
289
+ if (oFormat.oFormatOptions.calendarWeekNumbering && !Object.values(CalendarWeekNumbering).includes(oFormat.oFormatOptions.calendarWeekNumbering)) {
290
+ throw new TypeError('Illegal format option calendarWeekNumbering: \'' + oFormat.oFormatOptions.calendarWeekNumbering + '\'');
283
291
  }
284
292
  if (!oFormat.oFormatOptions.pattern) {
285
293
  if (oFormat.oFormatOptions.format) {
@@ -361,7 +369,15 @@ DateFormat.prototype.init = function () {
361
369
  this.aErasNarrow = this.oLocaleData.getEras('narrow', sCalendarType);
362
370
  this.aErasAbbrev = this.oLocaleData.getEras('abbreviated', sCalendarType);
363
371
  this.aErasWide = this.oLocaleData.getEras('wide', sCalendarType);
364
- this.aDayPeriods = this.oLocaleData.getDayPeriods('abbreviated', sCalendarType);
372
+ this.aDayPeriodsAbbrev = this.oLocaleData.getDayPeriods('abbreviated', sCalendarType);
373
+ this.aDayPeriodsNarrow = this.oLocaleData.getDayPeriods('narrow', sCalendarType);
374
+ this.aDayPeriodsWide = this.oLocaleData.getDayPeriods('wide', sCalendarType);
375
+ this.oFlexibleDayPeriodsAbbrev = this.oLocaleData.getFlexibleDayPeriods('abbreviated', sCalendarType);
376
+ this.oFlexibleDayPeriodsNarrow = this.oLocaleData.getFlexibleDayPeriods('narrow', sCalendarType);
377
+ this.oFlexibleDayPeriodsWide = this.oLocaleData.getFlexibleDayPeriods('wide', sCalendarType);
378
+ this.oFlexibleDayPeriodsAbbrevSt = this.oLocaleData.getFlexibleDayPeriodsStandAlone('abbreviated', sCalendarType);
379
+ this.oFlexibleDayPeriodsNarrowSt = this.oLocaleData.getFlexibleDayPeriodsStandAlone('narrow', sCalendarType);
380
+ this.oFlexibleDayPeriodsWideSt = this.oLocaleData.getFlexibleDayPeriodsStandAlone('wide', sCalendarType);
365
381
  this.aFormatArray = this.parseCldrDatePattern(this.oFormatOptions.pattern);
366
382
  this.sAllowedCharacters = this.getAllowedCharacters(this.aFormatArray);
367
383
  };
@@ -601,7 +617,7 @@ DateFormat.prototype.oSymbols = {
601
617
  'Y': {
602
618
  name: 'weekYear',
603
619
  format: function (oField, oDate, bUTC, oFormat) {
604
- var oWeek = oDate.getUTCWeek();
620
+ var oWeek = oDate.getUTCWeek(oFormat.oLocale, getCalendarWeekParameter(oFormat.oFormatOptions));
605
621
  var iWeekYear = oWeek.year;
606
622
  var sWeekYear = String(iWeekYear);
607
623
  var sCalendarType = oFormat.oFormatOptions.calendarType;
@@ -752,7 +768,7 @@ DateFormat.prototype.oSymbols = {
752
768
  'w': {
753
769
  name: 'weekInYear',
754
770
  format: function (oField, oDate, bUTC, oFormat) {
755
- var oWeek = oDate.getUTCWeek();
771
+ var oWeek = oDate.getUTCWeek(oFormat.oLocale, getCalendarWeekParameter(oFormat.oFormatOptions));
756
772
  var iWeek = oWeek.week;
757
773
  var sWeek = String(iWeek + 1);
758
774
  if (oField.digits < 3) {
@@ -1034,35 +1050,89 @@ DateFormat.prototype.oSymbols = {
1034
1050
  name: 'amPmMarker',
1035
1051
  format: function (oField, oDate, bUTC, oFormat) {
1036
1052
  var iDayPeriod = oDate.getUTCDayPeriod();
1037
- return oFormat.aDayPeriods[iDayPeriod];
1053
+ if (oField.digits <= 3) {
1054
+ return oFormat.aDayPeriodsAbbrev[iDayPeriod];
1055
+ } else if (oField.digits === 4) {
1056
+ return oFormat.aDayPeriodsWide[iDayPeriod];
1057
+ } else {
1058
+ return oFormat.aDayPeriodsNarrow[iDayPeriod];
1059
+ }
1060
+ },
1061
+ parse: function (sValue, oPart, oFormat, oConfig, sTimezone) {
1062
+ var rAMPM, bAMPMAlternativeCase, oEntry, i, aMatch, normalize, aVariants, aDayPeriodsVariants = [
1063
+ oFormat.aDayPeriodsWide,
1064
+ oFormat.aDayPeriodsAbbrev,
1065
+ oFormat.aDayPeriodsNarrow
1066
+ ];
1067
+ rAMPM = /[aApP](?:\.)?[\x20\xA0]?[mM](?:\.)?/;
1068
+ aMatch = sValue.match(rAMPM);
1069
+ bAMPMAlternativeCase = aMatch && aMatch.index === 0;
1070
+ function normalize(sValue) {
1071
+ return sValue.replace(/[\x20\xA0]/g, '').replace(/\./g, '');
1072
+ }
1073
+ if (bAMPMAlternativeCase) {
1074
+ sValue = normalize(sValue);
1075
+ }
1076
+ for (i = 0; i < aDayPeriodsVariants.length; i += 1) {
1077
+ aVariants = aDayPeriodsVariants[i];
1078
+ if (bAMPMAlternativeCase) {
1079
+ aVariants = aVariants.map(normalize);
1080
+ }
1081
+ oEntry = oParseHelper.findEntry(sValue, aVariants, oFormat.oLocaleData.sCLDRLocaleId);
1082
+ if (oEntry.index !== -1) {
1083
+ return {
1084
+ pm: oEntry.index === 1,
1085
+ length: bAMPMAlternativeCase ? aMatch[0].length : oEntry.length
1086
+ };
1087
+ }
1088
+ }
1089
+ return { valid: false };
1090
+ }
1091
+ },
1092
+ 'B': {
1093
+ name: 'flexibleDayPeriod',
1094
+ format: function (oField, oDate, bUTC, oFormat) {
1095
+ var bContainsHour = oFormat.aFormatArray.some(function (oFormatElement) {
1096
+ return 'hHKk'.includes(oFormatElement.symbol);
1097
+ }), sFlexibleDayPeriod = oFormat.oLocaleData.getFlexibleDayPeriodOfTime(oDate.getUTCHours(), oDate.getUTCMinutes());
1098
+ if (bContainsHour) {
1099
+ if (oField.digits <= 3) {
1100
+ return oFormat.oFlexibleDayPeriodsAbbrev[sFlexibleDayPeriod];
1101
+ }
1102
+ if (oField.digits === 4) {
1103
+ return oFormat.oFlexibleDayPeriodsWide[sFlexibleDayPeriod];
1104
+ }
1105
+ return oFormat.oFlexibleDayPeriodsNarrow[sFlexibleDayPeriod];
1106
+ }
1107
+ if (oField.digits <= 3) {
1108
+ return oFormat.oFlexibleDayPeriodsAbbrevSt[sFlexibleDayPeriod];
1109
+ }
1110
+ if (oField.digits === 4) {
1111
+ return oFormat.oFlexibleDayPeriodsWideSt[sFlexibleDayPeriod];
1112
+ }
1113
+ return oFormat.oFlexibleDayPeriodsNarrowSt[sFlexibleDayPeriod];
1038
1114
  },
1039
1115
  parse: function (sValue, oPart, oFormat, oConfig) {
1040
- var bPM;
1041
- var iLength;
1042
- var sAM = oFormat.aDayPeriods[0], sPM = oFormat.aDayPeriods[1];
1043
- var rAMPM = /[aApP](?:\.)?[\x20\xA0]?[mM](?:\.)?/;
1044
- var aMatch = sValue.match(rAMPM);
1045
- var bVariant = aMatch && aMatch.index === 0;
1046
- if (bVariant) {
1047
- sValue = aMatch[0];
1048
- sAM = sAM.replace(/[\x20\xA0]/g, '');
1049
- sPM = sPM.replace(/[\x20\xA0]/g, '');
1050
- sValue = sValue.replace(/[\x20\xA0]/g, '');
1051
- sAM = sAM.replace(/\./g, '').toLowerCase();
1052
- sPM = sPM.replace(/\./g, '').toLowerCase();
1053
- sValue = sValue.replace(/\./g, '').toLowerCase();
1054
- }
1055
- if (sValue.indexOf(sAM) === 0) {
1056
- bPM = false;
1057
- iLength = bVariant ? aMatch[0].length : sAM.length;
1058
- } else if (sValue.indexOf(sPM) === 0) {
1059
- bPM = true;
1060
- iLength = bVariant ? aMatch[0].length : sPM.length;
1116
+ var i, oFound, oVariant, bContainsHour = oFormat.aFormatArray.some(function (oFormatElement) {
1117
+ return 'hHKk'.includes(oFormatElement.symbol);
1118
+ }), aFlexibleDayPeriodVariants = [
1119
+ oFormat.oFlexibleDayPeriodsWide,
1120
+ oFormat.oFlexibleDayPeriodsAbbrev,
1121
+ oFormat.oFlexibleDayPeriodsNarrow
1122
+ ];
1123
+ if (bContainsHour) {
1124
+ for (i = 0; i < aFlexibleDayPeriodVariants.length; i++) {
1125
+ oVariant = aFlexibleDayPeriodVariants[i];
1126
+ oFound = oParseHelper.findEntry(sValue, Object.values(oVariant), oFormat.oLocaleData.sCLDRLocaleId);
1127
+ if (oFound.index !== -1) {
1128
+ return {
1129
+ flexDayPeriod: Object.keys(oVariant)[oFound.index],
1130
+ length: oFound.length
1131
+ };
1132
+ }
1133
+ }
1061
1134
  }
1062
- return {
1063
- pm: bPM,
1064
- length: iLength
1065
- };
1135
+ return { valid: false };
1066
1136
  }
1067
1137
  },
1068
1138
  'H': {
@@ -1338,7 +1408,7 @@ DateFormat.prototype.oSymbols = {
1338
1408
  name: 'timezoneID',
1339
1409
  format: function (oField, oDate, bUTC, oFormat, sTimezone) {
1340
1410
  if (!bUTC && oField.digits === 2) {
1341
- return sTimezone;
1411
+ return oFormat.oLocaleData.getTimezoneTranslations()[sTimezone] || sTimezone;
1342
1412
  }
1343
1413
  return '';
1344
1414
  },
@@ -1348,18 +1418,27 @@ DateFormat.prototype.oSymbols = {
1348
1418
  length: 0
1349
1419
  };
1350
1420
  if (oPart.digits === 2) {
1351
- if (sValue === sTimezone) {
1352
- oTimezoneParsed.timezone = sTimezone;
1353
- oTimezoneParsed.length = sTimezone.length;
1354
- return oTimezoneParsed;
1421
+ var mTimezoneTranslations = oFormat.oLocaleData.getTimezoneTranslations();
1422
+ if (sValue === mTimezoneTranslations[sTimezone]) {
1423
+ return {
1424
+ timezone: sTimezone,
1425
+ length: sValue.length
1426
+ };
1355
1427
  }
1356
- if (sValue) {
1357
- var rIanaTimezone = new RegExp('([A-Za-z_])+([/][A-Za-z_]+)+');
1358
- var aResult = rIanaTimezone.exec(sValue);
1359
- if (aResult && aResult[0] && TimezoneUtil.isValidTimezone(aResult[0])) {
1360
- oTimezoneParsed.timezone = aResult[0];
1361
- oTimezoneParsed.length = aResult[0].length;
1362
- return oTimezoneParsed;
1428
+ var aTimezoneTranslations = Object.values(mTimezoneTranslations);
1429
+ var oTimezoneResult = oParseHelper.findEntry(sValue, aTimezoneTranslations, oFormat.oLocaleData.sCLDRLocaleId);
1430
+ if (oTimezoneResult.index !== -1) {
1431
+ return {
1432
+ timezone: Object.keys(mTimezoneTranslations)[oTimezoneResult.index],
1433
+ length: oTimezoneResult.length
1434
+ };
1435
+ }
1436
+ var sCurrentValue = '';
1437
+ for (var i = 0; i < sValue.length; i++) {
1438
+ sCurrentValue += sValue[i];
1439
+ if (TimezoneUtil.isValidTimezone(sCurrentValue)) {
1440
+ oTimezoneParsed.timezone = sCurrentValue;
1441
+ oTimezoneParsed.length = sCurrentValue.length;
1363
1442
  }
1364
1443
  }
1365
1444
  }
@@ -1383,7 +1462,7 @@ DateFormat.prototype._format = function (oJSDate, bUTC, sTimezone) {
1383
1462
  aBuffer.push(this.oSymbols[sSymbol].format(oPart, oDate, bUTC, this, sTimezone));
1384
1463
  }
1385
1464
  sResult = aBuffer.join('');
1386
- if (Core.getConfiguration().getOriginInfo()) {
1465
+ if (Configuration.getOriginInfo()) {
1387
1466
  sResult = new String(sResult);
1388
1467
  sResult.originInfo = {
1389
1468
  source: 'Common Locale Data Repository',
@@ -1409,7 +1488,7 @@ DateFormat.prototype.format = function (vJSDate, bUTC) {
1409
1488
  if (bUTC === undefined) {
1410
1489
  bUTC = this.oFormatOptions.UTC;
1411
1490
  }
1412
- sTimezone = sTimezone || Core.getConfiguration().getTimezone();
1491
+ sTimezone = sTimezone || Configuration.getTimezone();
1413
1492
  if (Array.isArray(vJSDate)) {
1414
1493
  if (!this.oFormatOptions.interval) {
1415
1494
  Log.error('Non-interval DateFormat can\'t format more than one date instance.');
@@ -1441,7 +1520,7 @@ DateFormat.prototype.format = function (vJSDate, bUTC) {
1441
1520
  } else {
1442
1521
  if (!isValidDateObject(vJSDate)) {
1443
1522
  if (this.type === mDateFormatTypes.DATETIME_WITH_TIMEZONE && this.oFormatOptions.pattern.includes('VV')) {
1444
- return sTimezone;
1523
+ return this.oLocaleData.getTimezoneTranslations()[sTimezone] || sTimezone;
1445
1524
  }
1446
1525
  Log.error('The given date instance isn\'t valid.');
1447
1526
  return '';
@@ -1519,7 +1598,7 @@ DateFormat.prototype._getGreatestDiffField = function (aDates) {
1519
1598
  return null;
1520
1599
  };
1521
1600
  DateFormat.prototype._parse = function (sValue, aFormatArray, bUTC, bStrict, sTimezone) {
1522
- var iIndex = 0, oPart, sSubValue, oResult;
1601
+ var iIndex = 0, sFlexibleDayPeriod, oPart, bPM, sSubValue, oResult;
1523
1602
  var oDateValue = {
1524
1603
  valid: true,
1525
1604
  lastTimezonePatternSymbol: ''
@@ -1544,7 +1623,12 @@ DateFormat.prototype._parse = function (sValue, aFormatArray, bUTC, bStrict, sTi
1544
1623
  iIndex += oResult.length || 0;
1545
1624
  }
1546
1625
  oDateValue.index = iIndex;
1547
- if (oDateValue.pm) {
1626
+ bPM = oDateValue.pm;
1627
+ if (oDateValue.flexDayPeriod && oDateValue.hour * 60 + (oDateValue.minute || 0) < 720) {
1628
+ sFlexibleDayPeriod = this.oLocaleData.getFlexibleDayPeriodOfTime(oDateValue.hour + 12, oDateValue.minute || 0);
1629
+ bPM = oDateValue.flexDayPeriod === sFlexibleDayPeriod;
1630
+ }
1631
+ if (bPM) {
1548
1632
  oDateValue.hour += 12;
1549
1633
  }
1550
1634
  if (oDateValue.dayNumberOfWeek === undefined && oDateValue.dayOfWeek !== undefined) {
@@ -1601,13 +1685,24 @@ DateFormat.prototype._parseInterval = function (sValue, sCalendarType, bUTC, bSt
1601
1685
  }.bind(this));
1602
1686
  return aDateValues;
1603
1687
  };
1688
+ function getCalendarWeekParameter(oFormatOptions) {
1689
+ if (oFormatOptions.calendarWeekNumbering) {
1690
+ return oFormatOptions.calendarWeekNumbering;
1691
+ } else if (oFormatOptions.firstDayOfWeek !== undefined && oFormatOptions.minimalDaysInFirstWeek !== undefined) {
1692
+ return {
1693
+ firstDayOfWeek: oFormatOptions.firstDayOfWeek,
1694
+ minimalDaysInFirstWeek: oFormatOptions.minimalDaysInFirstWeek
1695
+ };
1696
+ }
1697
+ return undefined;
1698
+ }
1604
1699
  var convertToTimezone = function (oJSDate, sTimezone, bUTC) {
1605
1700
  if (!bUTC && isValidDateObject(oJSDate)) {
1606
1701
  return TimezoneUtil.convertToTimezone(oJSDate, sTimezone);
1607
1702
  }
1608
1703
  return oJSDate;
1609
1704
  };
1610
- var fnCreateDate = function (oDateValue, sCalendarType, bUTC, bStrict, sTimezone) {
1705
+ var fnCreateDate = function (oDateValue, sCalendarType, bUTC, bStrict, sTimezone, oFormatOptions, oLocale) {
1611
1706
  if (!oDateValue.valid) {
1612
1707
  return null;
1613
1708
  }
@@ -1628,7 +1723,7 @@ var fnCreateDate = function (oDateValue, sCalendarType, bUTC, bStrict, sTimezone
1628
1723
  oDate.setUTCWeek({
1629
1724
  year: oDateValue.weekYear || oDateValue.year,
1630
1725
  week: oDateValue.week
1631
- });
1726
+ }, oLocale, getCalendarWeekParameter(oFormatOptions));
1632
1727
  if (oDateValue.dayNumberOfWeek !== undefined) {
1633
1728
  oDate.setUTCDate(oDate.getUTCDate() + oDateValue.dayNumberOfWeek - 1);
1634
1729
  }
@@ -1643,7 +1738,7 @@ var fnCreateDate = function (oDateValue, sCalendarType, bUTC, bStrict, sTimezone
1643
1738
  }
1644
1739
  }
1645
1740
  if (oDateValue.tzDiff) {
1646
- oDate.setUTCSeconds((oDateValue.second || 0) + oDateValue.tzDiff);
1741
+ oDate.setUTCSeconds(oDate.getUTCSeconds() + oDateValue.tzDiff);
1647
1742
  }
1648
1743
  return oDate;
1649
1744
  };
@@ -1694,7 +1789,7 @@ DateFormat.prototype.parse = function (sValue, bUTC, bStrict) {
1694
1789
  sValue = sValue == null ? '' : String(sValue).trim();
1695
1790
  var oDateValue;
1696
1791
  var sCalendarType = this.oFormatOptions.calendarType;
1697
- sTimezone = sTimezone || Core.getConfiguration().getTimezone();
1792
+ sTimezone = sTimezone || Configuration.getTimezone();
1698
1793
  if (bStrict === undefined) {
1699
1794
  bStrict = this.oFormatOptions.strictParsing;
1700
1795
  }
@@ -1710,7 +1805,7 @@ DateFormat.prototype.parse = function (sValue, bUTC, bStrict) {
1710
1805
  if (oDateValue.index === 0 || oDateValue.index < sValue.length) {
1711
1806
  oDateValue.valid = false;
1712
1807
  }
1713
- oJSDate = fnCreateDate(oDateValue, sCalendarType, bUTC, bStrict, sTimezone);
1808
+ oJSDate = fnCreateDate(oDateValue, sCalendarType, bUTC, bStrict, sTimezone, this.oFormatOptions, this.oLocale);
1714
1809
  if (oJSDate) {
1715
1810
  if (this.type === mDateFormatTypes.DATETIME_WITH_TIMEZONE) {
1716
1811
  var bShowTimezone = this.oFormatOptions.showTimezone === undefined || this.oFormatOptions.showTimezone;
@@ -1738,8 +1833,8 @@ DateFormat.prototype.parse = function (sValue, bUTC, bStrict) {
1738
1833
  if (aDateValues && aDateValues.length == 2) {
1739
1834
  var oDateValue1 = mergeWithoutOverwrite(aDateValues[0], aDateValues[1]);
1740
1835
  var oDateValue2 = mergeWithoutOverwrite(aDateValues[1], aDateValues[0]);
1741
- oJSDate1 = fnCreateDate(oDateValue1, sCalendarType, bUTC, bStrict, sTimezone);
1742
- oJSDate2 = fnCreateDate(oDateValue2, sCalendarType, bUTC, bStrict, sTimezone);
1836
+ oJSDate1 = fnCreateDate(oDateValue1, sCalendarType, bUTC, bStrict, sTimezone, this.oFormatOptions, this.oLocale);
1837
+ oJSDate2 = fnCreateDate(oDateValue2, sCalendarType, bUTC, bStrict, sTimezone, this.oFormatOptions, this.oLocale);
1743
1838
  if (oJSDate1 && oJSDate2) {
1744
1839
  if (this.oFormatOptions.singleIntervalValue && oJSDate1.getTime() === oJSDate2.getTime()) {
1745
1840
  return [
@@ -2067,7 +2162,12 @@ var mRelativeDiffs = {
2067
2162
  }
2068
2163
  };
2069
2164
  DateFormat.prototype._adaptDayOfWeek = function (iDayOfWeek) {
2070
- var iFirstDayOfWeek = LocaleData.getInstance(Core.getConfiguration().getFormatSettings().getFormatLocale()).getFirstDayOfWeek();
2165
+ var vCalendarWeekParameter = getCalendarWeekParameter(this.oFormatOptions), iFirstDayOfWeek;
2166
+ if (typeof vCalendarWeekParameter === 'object') {
2167
+ iFirstDayOfWeek = vCalendarWeekParameter.firstDayOfWeek;
2168
+ } else {
2169
+ iFirstDayOfWeek = CalendarUtils.getWeekConfigurationValues(vCalendarWeekParameter, this.oLocale).firstDayOfWeek;
2170
+ }
2071
2171
  var iDayNumberOfWeek = iDayOfWeek - (iFirstDayOfWeek - 1);
2072
2172
  if (iDayNumberOfWeek <= 0) {
2073
2173
  iDayNumberOfWeek += 7;
@@ -1,5 +1,6 @@
1
1
  var TimezoneUtil = {};
2
2
  var sLocalTimezone = "";
3
+ var aSupportedTimezoneIDs;
3
4
  var oIntlDateTimeFormatCache = {
4
5
  _oCache: new Map(),
5
6
  _iCacheLimit: 10,
@@ -33,6 +34,16 @@ TimezoneUtil.isValidTimezone = function (sTimezone) {
33
34
  if (!sTimezone) {
34
35
  return false;
35
36
  }
37
+ if (Intl.supportedValuesOf) {
38
+ try {
39
+ aSupportedTimezoneIDs = aSupportedTimezoneIDs || Intl.supportedValuesOf("timeZone");
40
+ if (aSupportedTimezoneIDs.includes(sTimezone)) {
41
+ return true;
42
+ }
43
+ } catch (oError) {
44
+ aSupportedTimezoneIDs = [];
45
+ }
46
+ }
36
47
  try {
37
48
  oIntlDateTimeFormatCache.get(sTimezone);
38
49
  return true;
@@ -63,7 +74,7 @@ TimezoneUtil._getDateFromParts = function (oParts) {
63
74
  iUTCYear = iUTCYear * -1 + 1;
64
75
  }
65
76
  oDate.setUTCFullYear(iUTCYear, parseInt(oParts.month) - 1, parseInt(oParts.day));
66
- oDate.setUTCHours(parseInt(oParts.hour), parseInt(oParts.minute), parseInt(oParts.second), parseInt(oParts.fractionalSecond));
77
+ oDate.setUTCHours(parseInt(oParts.hour), parseInt(oParts.minute), parseInt(oParts.second), parseInt(oParts.fractionalSecond || 0));
67
78
  return oDate;
68
79
  };
69
80
  TimezoneUtil.calculateOffset = function (oDate, sTimezoneSource) {
@@ -5,25 +5,28 @@ const esmAbsToRel = resolve.sync("@ui5/webcomponents-tools/lib/esm-abs-to-rel/in
5
5
 
6
6
  const scripts = {
7
7
  clean: "rimraf dist",
8
- lint: "eslint . --config config/.eslintrc.js",
8
+ lint: "cross-env UI5_TS=true eslint . --config config/.eslintrc.js",
9
9
  build: {
10
- "default": "nps lint clean copy.used-modules copy.cldr copy.overlay build.replace-amd build.replace-export-true build.replace-export-false build.amd-to-es6 build.replace-global-core-usage build.esm-abs-to-rel build.jsonImports copy.src",
10
+ "default": "nps lint clean copy.used-modules copy.cldr copy.overlay build.replace-amd build.replace-export-true build.replace-export-false build.amd-to-es6 build.replace-global-core-usage build.esm-abs-to-rel build.jsonImports build.typescript copy.src",
11
11
  "replace-amd": "replace-in-file sap.ui.define define dist/**/*.js",
12
12
  "replace-export-true": `replace-in-file ", /* bExport= */ true" "" dist/**/*.js`,
13
13
  "replace-export-false": `replace-in-file ", /* bExport= */ false" "" dist/**/*.js`,
14
14
  "amd-to-es6": "amdtoes6 --src=dist --replace --glob=**/*.js",
15
15
  "replace-global-core-usage": `node "${replaceGlobalCore}" dist/`,
16
16
  "esm-abs-to-rel": `node "${esmAbsToRel}" dist/`,
17
+ typescript: "tsc",
17
18
  jsonImports: "node ./lib/generate-json-imports/cldr.js"
18
19
  },
20
+ typescript: "tsc",
19
21
  copy: {
20
22
  "used-modules": `node "${copyUsedModules}" ./used-modules.txt dist/`,
21
- cldr: `copy-and-watch "../../node_modules/@openui5/sap.ui.core/src/sap/ui/core/cldr/*.json" dist/generated/assets/cldr/`,
23
+ cldr: `node ./lib/copy-and-strip-cldr/index.js "../../node_modules/@openui5/sap.ui.core/src/sap/ui/core/cldr/" dist/generated/assets/cldr/`,
22
24
  overlay: `copy-and-watch "overlay/**/*.js" dist/`,
23
25
  src: `copy-and-watch "src/**/*.js" dist/`,
24
26
  },
25
27
  watch: {
26
- default: 'nps watch.src',
28
+ default: 'concurrently "nps watch.src" "nps watch.typescript" ',
29
+ typescript: "tsc --watch",
27
30
  src: `nps "copy.src --watch --skip-initial-copy"`,
28
31
  },
29
32
  start: "nps watch",