@mui/x-date-pickers 6.7.0 → 6.9.0

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 (276) hide show
  1. package/AdapterDayjs/AdapterDayjs.d.ts +5 -1
  2. package/AdapterDayjs/AdapterDayjs.js +42 -15
  3. package/AdapterLuxon/AdapterLuxon.d.ts +1 -0
  4. package/AdapterLuxon/AdapterLuxon.js +12 -5
  5. package/AdapterMoment/AdapterMoment.js +18 -9
  6. package/CHANGELOG.md +145 -5541
  7. package/DateCalendar/DateCalendar.js +49 -21
  8. package/DateCalendar/DateCalendar.types.d.ts +8 -3
  9. package/DateCalendar/DayCalendar.d.ts +3 -1
  10. package/DateCalendar/DayCalendar.js +24 -17
  11. package/DateCalendar/PickersCalendarHeader.js +6 -3
  12. package/DateCalendar/useCalendarState.d.ts +5 -3
  13. package/DateCalendar/useCalendarState.js +41 -17
  14. package/DateCalendar/useIsDateDisabled.d.ts +1 -1
  15. package/DateCalendar/useIsDateDisabled.js +5 -3
  16. package/DateField/DateField.js +9 -1
  17. package/DatePicker/DatePicker.js +9 -1
  18. package/DateTimeField/DateTimeField.js +9 -1
  19. package/DateTimePicker/DateTimePicker.js +9 -1
  20. package/DesktopDatePicker/DesktopDatePicker.js +9 -1
  21. package/DesktopDateTimePicker/DesktopDateTimePicker.js +9 -1
  22. package/DesktopTimePicker/DesktopTimePicker.js +8 -0
  23. package/DigitalClock/DigitalClock.js +28 -15
  24. package/MobileDatePicker/MobileDatePicker.js +9 -1
  25. package/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
  26. package/MobileTimePicker/MobileTimePicker.js +8 -0
  27. package/MonthCalendar/MonthCalendar.js +57 -24
  28. package/MonthCalendar/MonthCalendar.types.d.ts +8 -2
  29. package/MultiSectionDigitalClock/MultiSectionDigitalClock.js +28 -15
  30. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -1
  31. package/PickersLayout/PickersLayout.js +1 -0
  32. package/PickersLayout/usePickerLayout.js +4 -3
  33. package/PickersShortcuts/PickersShortcuts.d.ts +12 -2
  34. package/PickersShortcuts/PickersShortcuts.js +10 -2
  35. package/PickersShortcuts/index.d.ts +1 -1
  36. package/StaticDatePicker/StaticDatePicker.js +9 -1
  37. package/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
  38. package/StaticTimePicker/StaticTimePicker.js +8 -0
  39. package/TimeClock/TimeClock.js +27 -15
  40. package/TimeField/TimeField.js +9 -1
  41. package/TimePicker/TimePicker.js +8 -0
  42. package/YearCalendar/YearCalendar.js +55 -22
  43. package/YearCalendar/YearCalendar.types.d.ts +8 -2
  44. package/dateTimeViewRenderers/dateTimeViewRenderers.d.ts +1 -1
  45. package/dateTimeViewRenderers/dateTimeViewRenderers.js +5 -2
  46. package/dateViewRenderers/dateViewRenderers.d.ts +1 -1
  47. package/dateViewRenderers/dateViewRenderers.js +4 -2
  48. package/index.js +1 -1
  49. package/internals/hooks/date-helpers-hooks.d.ts +4 -2
  50. package/internals/hooks/date-helpers-hooks.js +8 -6
  51. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +2 -0
  52. package/internals/hooks/useField/useField.d.ts +3 -1
  53. package/internals/hooks/useField/useField.js +23 -7
  54. package/internals/hooks/useField/useField.types.d.ts +6 -4
  55. package/internals/hooks/useField/useField.utils.d.ts +13 -11
  56. package/internals/hooks/useField/useField.utils.js +55 -43
  57. package/internals/hooks/useField/useFieldCharacterEditing.d.ts +3 -2
  58. package/internals/hooks/useField/useFieldCharacterEditing.js +6 -5
  59. package/internals/hooks/useField/useFieldState.d.ts +1 -0
  60. package/internals/hooks/useField/useFieldState.js +33 -23
  61. package/internals/hooks/useMobilePicker/useMobilePicker.js +2 -0
  62. package/internals/hooks/usePicker/usePickerValue.js +45 -9
  63. package/internals/hooks/usePicker/usePickerValue.types.d.ts +22 -6
  64. package/internals/hooks/usePicker/usePickerViews.d.ts +2 -1
  65. package/internals/hooks/usePicker/usePickerViews.js +7 -2
  66. package/internals/hooks/useUtils.d.ts +3 -2
  67. package/internals/hooks/useUtils.js +5 -2
  68. package/internals/hooks/useValueWithTimezone.d.ts +33 -0
  69. package/internals/hooks/useValueWithTimezone.js +69 -0
  70. package/internals/index.d.ts +1 -0
  71. package/internals/index.js +1 -0
  72. package/internals/models/props/clock.d.ts +2 -2
  73. package/internals/utils/date-utils.d.ts +4 -4
  74. package/internals/utils/date-utils.js +4 -12
  75. package/internals/utils/fields.js +1 -1
  76. package/internals/utils/getDefaultReferenceDate.d.ts +12 -3
  77. package/internals/utils/getDefaultReferenceDate.js +4 -4
  78. package/internals/utils/validation/extractValidationProps.d.ts +1 -1
  79. package/internals/utils/validation/validateDate.d.ts +3 -2
  80. package/internals/utils/validation/validateDate.js +14 -6
  81. package/internals/utils/validation/validateTime.d.ts +3 -2
  82. package/internals/utils/validation/validateTime.js +8 -8
  83. package/internals/utils/valueManagers.js +2 -1
  84. package/legacy/AdapterDayjs/AdapterDayjs.js +45 -16
  85. package/legacy/AdapterLuxon/AdapterLuxon.js +13 -6
  86. package/legacy/AdapterMoment/AdapterMoment.js +18 -9
  87. package/legacy/DateCalendar/DateCalendar.js +47 -24
  88. package/legacy/DateCalendar/DayCalendar.js +24 -17
  89. package/legacy/DateCalendar/PickersCalendarHeader.js +6 -3
  90. package/legacy/DateCalendar/useCalendarState.js +40 -17
  91. package/legacy/DateCalendar/useIsDateDisabled.js +5 -3
  92. package/legacy/DateField/DateField.js +9 -1
  93. package/legacy/DatePicker/DatePicker.js +9 -1
  94. package/legacy/DateTimeField/DateTimeField.js +9 -1
  95. package/legacy/DateTimePicker/DateTimePicker.js +9 -1
  96. package/legacy/DesktopDatePicker/DesktopDatePicker.js +9 -1
  97. package/legacy/DesktopDateTimePicker/DesktopDateTimePicker.js +9 -1
  98. package/legacy/DesktopTimePicker/DesktopTimePicker.js +8 -0
  99. package/legacy/DigitalClock/DigitalClock.js +26 -16
  100. package/legacy/MobileDatePicker/MobileDatePicker.js +9 -1
  101. package/legacy/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
  102. package/legacy/MobileTimePicker/MobileTimePicker.js +8 -0
  103. package/legacy/MonthCalendar/MonthCalendar.js +61 -32
  104. package/legacy/MultiSectionDigitalClock/MultiSectionDigitalClock.js +27 -16
  105. package/legacy/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -1
  106. package/legacy/PickersLayout/PickersLayout.js +1 -0
  107. package/legacy/PickersLayout/usePickerLayout.js +3 -2
  108. package/legacy/PickersShortcuts/PickersShortcuts.js +10 -2
  109. package/legacy/StaticDatePicker/StaticDatePicker.js +9 -1
  110. package/legacy/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
  111. package/legacy/StaticTimePicker/StaticTimePicker.js +8 -0
  112. package/legacy/TimeClock/TimeClock.js +25 -18
  113. package/legacy/TimeField/TimeField.js +9 -1
  114. package/legacy/TimePicker/TimePicker.js +8 -0
  115. package/legacy/YearCalendar/YearCalendar.js +59 -30
  116. package/legacy/dateTimeViewRenderers/dateTimeViewRenderers.js +5 -2
  117. package/legacy/dateViewRenderers/dateViewRenderers.js +4 -2
  118. package/legacy/index.js +1 -1
  119. package/legacy/internals/hooks/date-helpers-hooks.js +8 -6
  120. package/legacy/internals/hooks/useDesktopPicker/useDesktopPicker.js +2 -0
  121. package/legacy/internals/hooks/useField/useField.js +22 -6
  122. package/legacy/internals/hooks/useField/useField.utils.js +56 -44
  123. package/legacy/internals/hooks/useField/useFieldCharacterEditing.js +6 -5
  124. package/legacy/internals/hooks/useField/useFieldState.js +42 -33
  125. package/legacy/internals/hooks/useMobilePicker/useMobilePicker.js +2 -0
  126. package/legacy/internals/hooks/usePicker/usePickerValue.js +46 -9
  127. package/legacy/internals/hooks/usePicker/usePickerViews.js +7 -2
  128. package/legacy/internals/hooks/useUtils.js +5 -2
  129. package/legacy/internals/hooks/useValueWithTimezone.js +81 -0
  130. package/legacy/internals/index.js +1 -0
  131. package/legacy/internals/utils/date-utils.js +5 -13
  132. package/legacy/internals/utils/fields.js +1 -1
  133. package/legacy/internals/utils/getDefaultReferenceDate.js +4 -4
  134. package/legacy/internals/utils/validation/validateDate.js +12 -6
  135. package/legacy/internals/utils/validation/validateTime.js +8 -8
  136. package/legacy/internals/utils/valueManagers.js +3 -0
  137. package/legacy/locales/csCZ.js +2 -2
  138. package/legacy/locales/elGR.js +93 -0
  139. package/legacy/locales/index.js +1 -0
  140. package/legacy/tests/describeAdapters/describeAdapters.js +3 -1
  141. package/legacy/tests/describeGregorianAdapter/testCalculations.js +69 -27
  142. package/legacy/tests/describeJalaliAdapter/testCalculations.js +21 -0
  143. package/legacy/timeViewRenderers/timeViewRenderers.js +12 -6
  144. package/locales/csCZ.js +2 -2
  145. package/locales/elGR.d.ts +53 -0
  146. package/locales/elGR.js +57 -0
  147. package/locales/index.d.ts +1 -0
  148. package/locales/index.js +1 -0
  149. package/models/adapters.d.ts +2 -2
  150. package/models/timezone.d.ts +10 -0
  151. package/modern/AdapterDayjs/AdapterDayjs.js +41 -15
  152. package/modern/AdapterLuxon/AdapterLuxon.js +12 -4
  153. package/modern/AdapterMoment/AdapterMoment.js +18 -9
  154. package/modern/DateCalendar/DateCalendar.js +49 -21
  155. package/modern/DateCalendar/DayCalendar.js +24 -17
  156. package/modern/DateCalendar/PickersCalendarHeader.js +6 -3
  157. package/modern/DateCalendar/useCalendarState.js +41 -16
  158. package/modern/DateCalendar/useIsDateDisabled.js +5 -3
  159. package/modern/DateField/DateField.js +9 -1
  160. package/modern/DatePicker/DatePicker.js +9 -1
  161. package/modern/DateTimeField/DateTimeField.js +9 -1
  162. package/modern/DateTimePicker/DateTimePicker.js +9 -1
  163. package/modern/DesktopDatePicker/DesktopDatePicker.js +9 -1
  164. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +9 -1
  165. package/modern/DesktopTimePicker/DesktopTimePicker.js +8 -0
  166. package/modern/DigitalClock/DigitalClock.js +28 -15
  167. package/modern/MobileDatePicker/MobileDatePicker.js +9 -1
  168. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
  169. package/modern/MobileTimePicker/MobileTimePicker.js +8 -0
  170. package/modern/MonthCalendar/MonthCalendar.js +57 -24
  171. package/modern/MultiSectionDigitalClock/MultiSectionDigitalClock.js +28 -15
  172. package/modern/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -1
  173. package/modern/PickersLayout/PickersLayout.js +1 -0
  174. package/modern/PickersLayout/usePickerLayout.js +4 -3
  175. package/modern/PickersShortcuts/PickersShortcuts.js +10 -2
  176. package/modern/StaticDatePicker/StaticDatePicker.js +9 -1
  177. package/modern/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
  178. package/modern/StaticTimePicker/StaticTimePicker.js +8 -0
  179. package/modern/TimeClock/TimeClock.js +27 -15
  180. package/modern/TimeField/TimeField.js +9 -1
  181. package/modern/TimePicker/TimePicker.js +8 -0
  182. package/modern/YearCalendar/YearCalendar.js +55 -22
  183. package/modern/dateTimeViewRenderers/dateTimeViewRenderers.js +5 -2
  184. package/modern/dateViewRenderers/dateViewRenderers.js +4 -2
  185. package/modern/index.js +1 -1
  186. package/modern/internals/hooks/date-helpers-hooks.js +8 -6
  187. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +2 -0
  188. package/modern/internals/hooks/useField/useField.js +23 -7
  189. package/modern/internals/hooks/useField/useField.utils.js +55 -43
  190. package/modern/internals/hooks/useField/useFieldCharacterEditing.js +6 -5
  191. package/modern/internals/hooks/useField/useFieldState.js +33 -22
  192. package/modern/internals/hooks/useMobilePicker/useMobilePicker.js +2 -0
  193. package/modern/internals/hooks/usePicker/usePickerValue.js +45 -9
  194. package/modern/internals/hooks/usePicker/usePickerViews.js +7 -2
  195. package/modern/internals/hooks/useUtils.js +5 -2
  196. package/modern/internals/hooks/useValueWithTimezone.js +68 -0
  197. package/modern/internals/index.js +1 -0
  198. package/modern/internals/utils/date-utils.js +4 -12
  199. package/modern/internals/utils/fields.js +1 -1
  200. package/modern/internals/utils/getDefaultReferenceDate.js +4 -4
  201. package/modern/internals/utils/validation/validateDate.js +14 -6
  202. package/modern/internals/utils/validation/validateTime.js +8 -8
  203. package/modern/internals/utils/valueManagers.js +2 -1
  204. package/modern/locales/csCZ.js +2 -2
  205. package/modern/locales/elGR.js +57 -0
  206. package/modern/locales/index.js +1 -0
  207. package/modern/tests/describeAdapters/describeAdapters.js +3 -1
  208. package/modern/tests/describeGregorianAdapter/testCalculations.js +69 -27
  209. package/modern/tests/describeJalaliAdapter/testCalculations.js +21 -0
  210. package/modern/timeViewRenderers/timeViewRenderers.js +12 -6
  211. package/node/AdapterDayjs/AdapterDayjs.js +41 -15
  212. package/node/AdapterLuxon/AdapterLuxon.js +12 -4
  213. package/node/AdapterMoment/AdapterMoment.js +18 -9
  214. package/node/DateCalendar/DateCalendar.js +48 -20
  215. package/node/DateCalendar/DayCalendar.js +24 -17
  216. package/node/DateCalendar/PickersCalendarHeader.js +6 -3
  217. package/node/DateCalendar/useCalendarState.js +41 -16
  218. package/node/DateCalendar/useIsDateDisabled.js +5 -3
  219. package/node/DateField/DateField.js +9 -1
  220. package/node/DatePicker/DatePicker.js +9 -1
  221. package/node/DateTimeField/DateTimeField.js +9 -1
  222. package/node/DateTimePicker/DateTimePicker.js +9 -1
  223. package/node/DesktopDatePicker/DesktopDatePicker.js +9 -1
  224. package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +9 -1
  225. package/node/DesktopTimePicker/DesktopTimePicker.js +8 -0
  226. package/node/DigitalClock/DigitalClock.js +28 -15
  227. package/node/MobileDatePicker/MobileDatePicker.js +9 -1
  228. package/node/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
  229. package/node/MobileTimePicker/MobileTimePicker.js +8 -0
  230. package/node/MonthCalendar/MonthCalendar.js +57 -24
  231. package/node/MultiSectionDigitalClock/MultiSectionDigitalClock.js +28 -15
  232. package/node/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -1
  233. package/node/PickersLayout/PickersLayout.js +1 -0
  234. package/node/PickersLayout/usePickerLayout.js +4 -3
  235. package/node/PickersShortcuts/PickersShortcuts.js +10 -2
  236. package/node/StaticDatePicker/StaticDatePicker.js +9 -1
  237. package/node/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
  238. package/node/StaticTimePicker/StaticTimePicker.js +8 -0
  239. package/node/TimeClock/TimeClock.js +26 -14
  240. package/node/TimeField/TimeField.js +9 -1
  241. package/node/TimePicker/TimePicker.js +8 -0
  242. package/node/YearCalendar/YearCalendar.js +55 -22
  243. package/node/dateTimeViewRenderers/dateTimeViewRenderers.js +5 -2
  244. package/node/dateViewRenderers/dateViewRenderers.js +4 -2
  245. package/node/index.js +1 -1
  246. package/node/internals/hooks/date-helpers-hooks.js +8 -6
  247. package/node/internals/hooks/useDesktopPicker/useDesktopPicker.js +2 -0
  248. package/node/internals/hooks/useField/useField.js +23 -7
  249. package/node/internals/hooks/useField/useField.utils.js +55 -43
  250. package/node/internals/hooks/useField/useFieldCharacterEditing.js +6 -5
  251. package/node/internals/hooks/useField/useFieldState.js +33 -22
  252. package/node/internals/hooks/useMobilePicker/useMobilePicker.js +2 -0
  253. package/node/internals/hooks/usePicker/usePickerValue.js +44 -9
  254. package/node/internals/hooks/usePicker/usePickerViews.js +7 -2
  255. package/node/internals/hooks/useUtils.js +5 -2
  256. package/node/internals/hooks/useValueWithTimezone.js +79 -0
  257. package/node/internals/index.js +7 -0
  258. package/node/internals/utils/date-utils.js +5 -14
  259. package/node/internals/utils/fields.js +1 -1
  260. package/node/internals/utils/getDefaultReferenceDate.js +5 -4
  261. package/node/internals/utils/validation/validateDate.js +14 -6
  262. package/node/internals/utils/validation/validateTime.js +8 -8
  263. package/node/internals/utils/valueManagers.js +2 -1
  264. package/node/locales/csCZ.js +2 -2
  265. package/node/locales/elGR.js +64 -0
  266. package/node/locales/index.js +11 -0
  267. package/node/tests/describeAdapters/describeAdapters.js +3 -1
  268. package/node/tests/describeGregorianAdapter/testCalculations.js +69 -27
  269. package/node/tests/describeJalaliAdapter/testCalculations.js +21 -0
  270. package/node/timeViewRenderers/timeViewRenderers.js +12 -6
  271. package/package.json +2 -2
  272. package/tests/describeAdapters/describeAdapters.js +3 -1
  273. package/tests/describeGregorianAdapter/testCalculations.js +69 -27
  274. package/tests/describeJalaliAdapter/testCalculations.js +21 -0
  275. package/timeViewRenderers/timeViewRenderers.d.ts +3 -3
  276. package/timeViewRenderers/timeViewRenderers.js +12 -6
@@ -1,10 +1,12 @@
1
1
  import { expect } from 'chai';
2
+ import { getDateOffset } from 'test/utils/pickers-utils';
2
3
  import { TEST_DATE_ISO_STRING, TEST_DATE_LOCALE_STRING } from './describeGregorianAdapter.utils';
3
4
  export var testCalculations = function testCalculations(_ref) {
4
5
  var adapter = _ref.adapter,
5
6
  adapterTZ = _ref.adapterTZ,
6
7
  adapterFr = _ref.adapterFr,
7
- setDefaultTimezone = _ref.setDefaultTimezone;
8
+ setDefaultTimezone = _ref.setDefaultTimezone,
9
+ getLocaleFromDate = _ref.getLocaleFromDate;
8
10
  var testDateIso = adapter.date(TEST_DATE_ISO_STRING);
9
11
  var testDateLocale = adapter.date(TEST_DATE_LOCALE_STRING);
10
12
  describe('Method: date', function () {
@@ -114,25 +116,27 @@ export var testCalculations = function testCalculations(_ref) {
114
116
  testTimezone('default', 'America/Chicago');
115
117
  setDefaultTimezone(undefined);
116
118
  });
117
- describe('Method: setTimezone', function () {
118
- it('should support "default"', function () {
119
- if (adapter.isTimezoneCompatible) {
120
- var test = function test(timezone) {
121
- setDefaultTimezone(timezone);
122
- var dateWithLocaleTimezone = adapter.dateWithTimezone(undefined, 'system');
123
- var dateWithDefaultTimezone = adapter.setTimezone(dateWithLocaleTimezone, 'default');
124
- expect(adapter.getTimezone(dateWithDefaultTimezone)).to.equal(timezone);
125
- };
126
- test('America/New_York');
127
- test('Europe/Paris');
119
+ it('Method: setTimezone', function () {
120
+ if (adapter.isTimezoneCompatible) {
121
+ var test = function test(timezone) {
122
+ setDefaultTimezone(timezone);
123
+ var dateWithLocaleTimezone = adapter.dateWithTimezone(TEST_DATE_ISO_STRING, 'system');
124
+ var dateWithDefaultTimezone = adapter.setTimezone(dateWithLocaleTimezone, 'default');
125
+ expect(adapter.getTimezone(dateWithDefaultTimezone)).to.equal(timezone);
126
+ };
127
+ test('America/New_York');
128
+ test('Europe/Paris');
128
129
 
129
- // Reset to the default timezone
130
- setDefaultTimezone(undefined);
131
- } else {
132
- var localeDate = adapter.dateWithTimezone(undefined, 'system');
133
- expect(adapter.setTimezone(localeDate, 'default')).to.equal(localeDate);
134
- }
135
- });
130
+ // Reset to the default timezone
131
+ setDefaultTimezone(undefined);
132
+ } else {
133
+ var systemDate = adapter.dateWithTimezone(TEST_DATE_ISO_STRING, 'system');
134
+ expect(adapter.setTimezone(systemDate, 'default')).toEqualDateTime(systemDate);
135
+ expect(adapter.setTimezone(systemDate, 'system')).toEqualDateTime(systemDate);
136
+ var defaultDate = adapter.dateWithTimezone(TEST_DATE_ISO_STRING, 'default');
137
+ expect(adapter.setTimezone(systemDate, 'default')).toEqualDateTime(defaultDate);
138
+ expect(adapter.setTimezone(systemDate, 'system')).toEqualDateTime(defaultDate);
139
+ }
136
140
  });
137
141
  it('Method: toJsDate', function () {
138
142
  expect(adapter.toJsDate(testDateIso)).to.be.instanceOf(Date);
@@ -146,9 +150,6 @@ export var testCalculations = function testCalculations(_ref) {
146
150
  if (adapter.lib === 'date-fns') {
147
151
  // date-fns never suppress useless milliseconds in the end
148
152
  expect(outputtedISO).to.equal(TEST_DATE_ISO_STRING.replace('.000Z', 'Z'));
149
- } else if (adapter.lib === 'luxon') {
150
- // luxon does not shorthand +00:00 to Z, which is also valid ISO string
151
- expect(outputtedISO).to.equal(TEST_DATE_ISO_STRING.replace('Z', '+00:00'));
152
153
  } else {
153
154
  expect(outputtedISO).to.equal(TEST_DATE_ISO_STRING);
154
155
  }
@@ -549,6 +550,9 @@ export var testCalculations = function testCalculations(_ref) {
549
550
  it('Method: getSeconds', function () {
550
551
  expect(adapter.getSeconds(testDateIso)).to.equal(0);
551
552
  });
553
+ it('Method: getMilliseconds', function () {
554
+ expect(adapter.getMilliseconds(testDateIso)).to.equal(0);
555
+ });
552
556
  it('Method: setYear', function () {
553
557
  expect(adapter.setYear(testDateIso, 2011)).toEqualDateTime('2011-10-30T11:44:00.000Z');
554
558
  });
@@ -567,6 +571,9 @@ export var testCalculations = function testCalculations(_ref) {
567
571
  it('Method: setSeconds', function () {
568
572
  expect(adapter.setSeconds(testDateIso, 11)).toEqualDateTime('2018-10-30T11:44:11.000Z');
569
573
  });
574
+ it('Method: setMilliseconds', function () {
575
+ expect(adapter.setMilliseconds(testDateIso, 11)).toEqualDateTime('2018-10-30T11:44:00.011Z');
576
+ });
570
577
  it('Method: getDaysInMonth', function () {
571
578
  expect(adapter.getDaysInMonth(testDateIso)).to.equal(31);
572
579
  expect(adapter.getDaysInMonth(testDateLocale)).to.equal(31);
@@ -598,11 +605,46 @@ export var testCalculations = function testCalculations(_ref) {
598
605
  date = adapter.addDays(date, 1);
599
606
  });
600
607
  });
601
- it('Method: getWeekArray', function () {
602
- var weekArray = adapter.getWeekArray(testDateIso);
603
- expect(weekArray).to.have.length(5);
604
- weekArray.forEach(function (week) {
605
- expect(week).to.have.length(7);
608
+ describe('Method: getWeekArray', function () {
609
+ it('should work without timezones', function () {
610
+ var weekArray = adapter.getWeekArray(testDateIso);
611
+ var expectedDate = adapter.startOfWeek(adapter.startOfMonth(testDateIso));
612
+ expect(weekArray).to.have.length(5);
613
+ weekArray.forEach(function (week) {
614
+ expect(week).to.have.length(7);
615
+ week.forEach(function (day) {
616
+ expect(day).toEqualDateTime(expectedDate);
617
+ expectedDate = adapter.addDays(expectedDate, 1);
618
+ });
619
+ });
620
+ });
621
+ it('should respect the DST', function test() {
622
+ if (!adapterTZ.isTimezoneCompatible) {
623
+ this.skip();
624
+ }
625
+ var referenceDate = adapterTZ.dateWithTimezone('2022-03-17', 'Europe/Paris');
626
+ var weekArray = adapterTZ.getWeekArray(referenceDate);
627
+ var expectedDate = adapter.startOfWeek(adapter.startOfMonth(referenceDate));
628
+ var lastNonDSTDay = adapterTZ.dateWithTimezone('2022-03-27', 'Europe/Paris');
629
+ expect(weekArray).to.have.length(5);
630
+ weekArray.forEach(function (week) {
631
+ expect(week).to.have.length(7);
632
+ week.forEach(function (day) {
633
+ expect(adapterTZ.startOfDay(day)).toEqualDateTime(adapterTZ.startOfDay(expectedDate));
634
+ expectedDate = adapterTZ.addDays(expectedDate, 1);
635
+ expect(getDateOffset(adapterTZ, day)).to.equal(adapterTZ.isAfter(day, lastNonDSTDay) ? 120 : 60);
636
+ });
637
+ });
638
+ });
639
+ it('should respect the locale of the adapter, not the locale of the date', function test() {
640
+ var dateFr = adapterFr.dateWithTimezone('2022-03-17', 'default');
641
+ var weekArray = adapter.getWeekArray(dateFr);
642
+ if (getLocaleFromDate) {
643
+ expect(getLocaleFromDate(weekArray[0][0])).to.match(/en/);
644
+ }
645
+
646
+ // Week should start on Monday (28th of March) for adapters supporting locale-based week start.
647
+ expect(adapter.getDate(weekArray[0][0])).to.equal(adapter.lib === 'luxon' ? 28 : 27);
606
648
  });
607
649
  });
608
650
  it('Method: getWeekNumber', function () {
@@ -162,6 +162,15 @@ export var testCalculations = function testCalculations(_ref) {
162
162
  it('Method: getDate', function () {
163
163
  expect(adapter.getDate(testDateIso)).to.equal(8);
164
164
  });
165
+ it('Method: getMinutes', function () {
166
+ expect(adapter.getMinutes(testDateIso)).to.equal(44);
167
+ });
168
+ it('Method: getSeconds', function () {
169
+ expect(adapter.getSeconds(testDateIso)).to.equal(0);
170
+ });
171
+ it('Method: getMilliseconds', function () {
172
+ expect(adapter.getMilliseconds(testDateIso)).to.equal(0);
173
+ });
165
174
  it('Method: setYear', function () {
166
175
  expect(adapter.setYear(testDateIso, 1398)).toEqualDateTime('2019-10-30T11:44:00.000Z');
167
176
  });
@@ -171,6 +180,18 @@ export var testCalculations = function testCalculations(_ref) {
171
180
  it('Method: setDate', function () {
172
181
  expect(adapter.setDate(testDateIso, 9)).toEqualDateTime('2018-10-31T11:44:00.000Z');
173
182
  });
183
+ it('Method: setHours', function () {
184
+ expect(adapter.setHours(testDateIso, 0)).toEqualDateTime('2018-10-30T00:44:00.000Z');
185
+ });
186
+ it('Method: setMinutes', function () {
187
+ expect(adapter.setMinutes(testDateIso, 12)).toEqualDateTime('2018-10-30T11:12:00.000Z');
188
+ });
189
+ it('Method: setSeconds', function () {
190
+ expect(adapter.setSeconds(testDateIso, 11)).toEqualDateTime('2018-10-30T11:44:11.000Z');
191
+ });
192
+ it('Method: setMilliseconds', function () {
193
+ expect(adapter.setMilliseconds(testDateIso, 11)).toEqualDateTime('2018-10-30T11:44:00.011Z');
194
+ });
174
195
  it('Method: getNextMonth', function () {
175
196
  expect(adapter.getNextMonth(testDateIso)).toEqualDateTime('2018-11-29T11:44:00.000Z');
176
197
  });
@@ -33,7 +33,8 @@ export var renderTimeViewClock = function renderTimeViewClock(_ref) {
33
33
  sx = _ref.sx,
34
34
  autoFocus = _ref.autoFocus,
35
35
  showViewSwitcher = _ref.showViewSwitcher,
36
- disableIgnoringDatePartForTimeValidation = _ref.disableIgnoringDatePartForTimeValidation;
36
+ disableIgnoringDatePartForTimeValidation = _ref.disableIgnoringDatePartForTimeValidation,
37
+ timezone = _ref.timezone;
37
38
  return /*#__PURE__*/_jsx(TimeClock, {
38
39
  view: view,
39
40
  onViewChange: onViewChange,
@@ -63,7 +64,8 @@ export var renderTimeViewClock = function renderTimeViewClock(_ref) {
63
64
  sx: sx,
64
65
  autoFocus: autoFocus,
65
66
  showViewSwitcher: showViewSwitcher,
66
- disableIgnoringDatePartForTimeValidation: disableIgnoringDatePartForTimeValidation
67
+ disableIgnoringDatePartForTimeValidation: disableIgnoringDatePartForTimeValidation,
68
+ timezone: timezone
67
69
  });
68
70
  };
69
71
  export var renderDigitalClockTimeView = function renderDigitalClockTimeView(_ref2) {
@@ -95,7 +97,8 @@ export var renderDigitalClockTimeView = function renderDigitalClockTimeView(_ref
95
97
  autoFocus = _ref2.autoFocus,
96
98
  disableIgnoringDatePartForTimeValidation = _ref2.disableIgnoringDatePartForTimeValidation,
97
99
  timeSteps = _ref2.timeSteps,
98
- skipDisabled = _ref2.skipDisabled;
100
+ skipDisabled = _ref2.skipDisabled,
101
+ timezone = _ref2.timezone;
99
102
  return /*#__PURE__*/_jsx(DigitalClock, {
100
103
  view: view,
101
104
  onViewChange: onViewChange,
@@ -125,7 +128,8 @@ export var renderDigitalClockTimeView = function renderDigitalClockTimeView(_ref
125
128
  autoFocus: autoFocus,
126
129
  disableIgnoringDatePartForTimeValidation: disableIgnoringDatePartForTimeValidation,
127
130
  timeStep: timeSteps == null ? void 0 : timeSteps.minutes,
128
- skipDisabled: skipDisabled
131
+ skipDisabled: skipDisabled,
132
+ timezone: timezone
129
133
  });
130
134
  };
131
135
  export var renderMultiSectionDigitalClockTimeView = function renderMultiSectionDigitalClockTimeView(_ref3) {
@@ -157,7 +161,8 @@ export var renderMultiSectionDigitalClockTimeView = function renderMultiSectionD
157
161
  autoFocus = _ref3.autoFocus,
158
162
  disableIgnoringDatePartForTimeValidation = _ref3.disableIgnoringDatePartForTimeValidation,
159
163
  timeSteps = _ref3.timeSteps,
160
- skipDisabled = _ref3.skipDisabled;
164
+ skipDisabled = _ref3.skipDisabled,
165
+ timezone = _ref3.timezone;
161
166
  return /*#__PURE__*/_jsx(MultiSectionDigitalClock, {
162
167
  view: view,
163
168
  onViewChange: onViewChange,
@@ -187,6 +192,7 @@ export var renderMultiSectionDigitalClockTimeView = function renderMultiSectionD
187
192
  autoFocus: autoFocus,
188
193
  disableIgnoringDatePartForTimeValidation: disableIgnoringDatePartForTimeValidation,
189
194
  timeSteps: timeSteps,
190
- skipDisabled: skipDisabled
195
+ skipDisabled: skipDisabled,
196
+ timezone: timezone
191
197
  });
192
198
  };
package/locales/csCZ.js CHANGED
@@ -8,8 +8,8 @@ const timeViews = {
8
8
  };
9
9
  const csCZPickers = {
10
10
  // Calendar navigation
11
- previousMonth: 'Další měsíc',
12
- nextMonth: 'Předchozí měsíc',
11
+ previousMonth: 'Předchozí měsíc',
12
+ nextMonth: 'Další měsíc',
13
13
  // View navigation
14
14
  openPreviousView: 'otevřít předchozí zobrazení',
15
15
  openNextView: 'otevřít další zobrazení',
@@ -0,0 +1,53 @@
1
+ import { TimeViewWithMeridiem } from '../internals/models';
2
+ export declare const elGR: {
3
+ components: {
4
+ MuiLocalizationProvider: {
5
+ defaultProps: {
6
+ localeText: {
7
+ previousMonth?: string | undefined;
8
+ nextMonth?: string | undefined;
9
+ calendarWeekNumberHeaderLabel?: string | undefined;
10
+ calendarWeekNumberHeaderText?: string | undefined;
11
+ calendarWeekNumberAriaLabelText?: ((weekNumber: number) => string) | undefined;
12
+ calendarWeekNumberText?: ((weekNumber: number) => string) | undefined;
13
+ openPreviousView?: string | undefined;
14
+ openNextView?: string | undefined;
15
+ calendarViewSwitchingButtonAriaLabel?: ((currentView: import("..").DateView) => string) | undefined;
16
+ start?: string | undefined;
17
+ end?: string | undefined;
18
+ cancelButtonLabel?: string | undefined;
19
+ clearButtonLabel?: string | undefined;
20
+ okButtonLabel?: string | undefined;
21
+ todayButtonLabel?: string | undefined;
22
+ clockLabelText?: ((view: import("..").TimeView, time: any, adapter: import("..").MuiPickersAdapter<any, any>) => string) | undefined;
23
+ hoursClockNumberText?: ((hours: string) => string) | undefined;
24
+ minutesClockNumberText?: ((minutes: string) => string) | undefined;
25
+ secondsClockNumberText?: ((seconds: string) => string) | undefined;
26
+ selectViewText?: ((view: TimeViewWithMeridiem) => string) | undefined;
27
+ openDatePickerDialogue?: ((date: any, utils: import("..").MuiPickersAdapter<any, any>) => string) | undefined;
28
+ openTimePickerDialogue?: ((date: any, utils: import("..").MuiPickersAdapter<any, any>) => string) | undefined;
29
+ timeTableLabel?: string | undefined;
30
+ dateTableLabel?: string | undefined;
31
+ fieldYearPlaceholder?: ((params: {
32
+ digitAmount: number;
33
+ }) => string) | undefined;
34
+ fieldMonthPlaceholder?: ((params: {
35
+ contentType: import("..").FieldSectionContentType;
36
+ }) => string) | undefined;
37
+ fieldDayPlaceholder?: (() => string) | undefined;
38
+ fieldWeekDayPlaceholder?: ((params: {
39
+ contentType: import("..").FieldSectionContentType;
40
+ }) => string) | undefined;
41
+ fieldHoursPlaceholder?: (() => string) | undefined;
42
+ fieldMinutesPlaceholder?: (() => string) | undefined;
43
+ fieldSecondsPlaceholder?: (() => string) | undefined;
44
+ fieldMeridiemPlaceholder?: (() => string) | undefined;
45
+ datePickerToolbarTitle?: string | undefined;
46
+ timePickerToolbarTitle?: string | undefined;
47
+ dateTimePickerToolbarTitle?: string | undefined;
48
+ dateRangePickerToolbarTitle?: string | undefined;
49
+ };
50
+ };
51
+ };
52
+ };
53
+ };
@@ -0,0 +1,57 @@
1
+ import { getPickersLocalization } from './utils/getPickersLocalization';
2
+ const views = {
3
+ hours: 'ώρες',
4
+ minutes: 'λεπτά',
5
+ seconds: 'δευτερόλεπτα',
6
+ meridiem: 'μεσημβρία'
7
+ };
8
+ const elGRPickers = {
9
+ // Calendar navigation
10
+ previousMonth: 'Προηγούμενος μήνας',
11
+ nextMonth: 'Επόμενος μήνας',
12
+ // View navigation
13
+ openPreviousView: 'ανοίγμα προηγούμενης προβολή',
14
+ openNextView: 'ανοίγμα επόμενης προβολή',
15
+ calendarViewSwitchingButtonAriaLabel: view => view === 'year' ? 'η προβολή έτους είναι ανοιχτή, μεταβείτε στην προβολή ημερολογίου' : 'η προβολή ημερολογίου είναι ανοιχτή, μεταβείτε στην προβολή έτους',
16
+ // DateRange placeholders
17
+ start: 'Αρχή',
18
+ end: 'Τέλος',
19
+ // Action bar
20
+ cancelButtonLabel: 'Άκυρο',
21
+ clearButtonLabel: 'Καθαρισμός',
22
+ okButtonLabel: 'OK',
23
+ todayButtonLabel: 'Σήμερα',
24
+ // Toolbar titles
25
+ datePickerToolbarTitle: 'Επιλέξτε ημερομηνία',
26
+ dateTimePickerToolbarTitle: 'Επιλέξτε ημερομηνία και ώρα',
27
+ timePickerToolbarTitle: 'Επιλέξτε ώρα',
28
+ dateRangePickerToolbarTitle: 'Επιλέξτε εύρος ημερομηνιών',
29
+ // Clock labels
30
+ clockLabelText: (view, time, adapter) => `Επιλέξτε ${views[view]}. ${time === null ? 'Δεν έχει επιλεγεί ώρα' : `Η επιλεγμένη ώρα είναι ${adapter.format(time, 'fullTime')}`}`,
31
+ hoursClockNumberText: hours => `${hours} ώρες`,
32
+ minutesClockNumberText: minutes => `${minutes} λεπτά`,
33
+ secondsClockNumberText: seconds => `${seconds} δευτερόλεπτα`,
34
+ // Digital clock labels
35
+ selectViewText: view => `Επιλέξτε ${views[view]}`,
36
+ // Calendar labels
37
+ calendarWeekNumberHeaderLabel: 'Αριθμός εβδομάδας',
38
+ calendarWeekNumberHeaderText: '#',
39
+ calendarWeekNumberAriaLabelText: weekNumber => `Εβδομάδα ${weekNumber}`,
40
+ calendarWeekNumberText: weekNumber => `${weekNumber}`,
41
+ // Open picker labels
42
+ openDatePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `Επιλέξτε ημερομηνία, η επιλεγμένη ημερομηνία είναι ${utils.format(value, 'fullDate')}` : 'Επιλέξτε ημερομηνία',
43
+ openTimePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `Επιλέξτε ώρα, η επιλεγμένη ώρα είναι ${utils.format(value, 'fullTime')}` : 'Επιλέξτε ώρα',
44
+ // Table labels
45
+ timeTableLabel: 'επιλέξτε ώρα',
46
+ dateTableLabel: 'επιλέξτε ημερομηνία',
47
+ // Field section placeholders
48
+ fieldYearPlaceholder: params => 'Y'.repeat(params.digitAmount),
49
+ fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'MMMM' : 'MM',
50
+ fieldDayPlaceholder: () => 'DD',
51
+ fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
52
+ fieldHoursPlaceholder: () => 'hh',
53
+ fieldMinutesPlaceholder: () => 'mm',
54
+ fieldSecondsPlaceholder: () => 'ss',
55
+ fieldMeridiemPlaceholder: () => 'aa'
56
+ };
57
+ export const elGR = getPickersLocalization(elGRPickers);
@@ -2,6 +2,7 @@ export * from './beBY';
2
2
  export * from './caES';
3
3
  export * from './csCZ';
4
4
  export * from './deDE';
5
+ export * from './elGR';
5
6
  export * from './enUS';
6
7
  export * from './esES';
7
8
  export * from './faIR';
package/locales/index.js CHANGED
@@ -2,6 +2,7 @@ export * from './beBY';
2
2
  export * from './caES';
3
3
  export * from './csCZ';
4
4
  export * from './deDE';
5
+ export * from './elGR';
5
6
  export * from './enUS';
6
7
  export * from './esES';
7
8
  export * from './faIR';
@@ -209,7 +209,7 @@ export interface MuiPickersAdapter<TDate, TLocale = any> {
209
209
  * If a `value` parameter is provided, pass it to the date library to try to parse it.
210
210
  * @template TDate
211
211
  * @param {string | null | undefined} value The optional value to parse.
212
- * @param {string} timezone The timezone of the date.
212
+ * @param {PickersTimezone} timezone The timezone of the date.
213
213
  * @returns {TDate | null} The parsed date.
214
214
  */
215
215
  dateWithTimezone(value: string | null | undefined, timezone: PickersTimezone): TDate | null;
@@ -223,7 +223,7 @@ export interface MuiPickersAdapter<TDate, TLocale = any> {
223
223
  * Convert a date to another timezone.
224
224
  * @template TDate
225
225
  * @param {TDate} value The date to convert.
226
- * @param {string} timezone The timezone to convert the date to.
226
+ * @param {PickersTimezone} timezone The timezone to convert the date to.
227
227
  * @returns {TDate} The converted date.
228
228
  */
229
229
  setTimezone(value: TDate, timezone: PickersTimezone): TDate;
@@ -1 +1,11 @@
1
1
  export type PickersTimezone = 'default' | 'system' | 'UTC' | string;
2
+ export interface TimezoneProps {
3
+ /**
4
+ * Choose which timezone to use for the value.
5
+ * Example: "default", "system", "UTC", "America/New_York".
6
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
7
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
8
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
9
+ */
10
+ timezone?: PickersTimezone;
11
+ }
@@ -183,9 +183,27 @@ export class AdapterDayjs {
183
183
  const comparingInValueTimezone = this.setTimezone(comparing, this.getTimezone(value));
184
184
  return value.format(comparisonTemplate) === comparingInValueTimezone.format(comparisonTemplate);
185
185
  };
186
+ /**
187
+ * Replace "default" by undefined before passing it to `dayjs
188
+ */
189
+ this.cleanTimezone = timezone => timezone === 'default' ? undefined : timezone;
186
190
  this.createSystemDate = value => {
187
191
  // TODO v7: Stop using `this.rawDayJsInstance` (drop the `instance` param on the adapters)
188
- return this.rawDayJsInstance(value);
192
+ /* istanbul ignore next */
193
+ if (this.rawDayJsInstance) {
194
+ return this.rawDayJsInstance(value);
195
+ }
196
+ if (this.hasUTCPlugin() && this.hasTimezonePlugin()) {
197
+ const timezone = defaultDayjs.tz.guess();
198
+
199
+ // We can't change the system timezone in the tests
200
+ /* istanbul ignore next */
201
+ if (timezone !== 'UTC') {
202
+ return defaultDayjs.tz(value, timezone);
203
+ }
204
+ return defaultDayjs(value);
205
+ }
206
+ return defaultDayjs(value);
189
207
  };
190
208
  this.createUTCDate = value => {
191
209
  /* istanbul ignore next */
@@ -204,9 +222,8 @@ export class AdapterDayjs {
204
222
  if (!this.hasTimezonePlugin()) {
205
223
  throw new Error(MISSING_TIMEZONE_PLUGIN);
206
224
  }
207
- const cleanTimezone = timezone === 'default' ? undefined : timezone;
208
225
  const keepLocalTime = value !== undefined && !value.endsWith('Z');
209
- return defaultDayjs(value).tz(cleanTimezone, keepLocalTime);
226
+ return defaultDayjs(value).tz(this.cleanTimezone(timezone), keepLocalTime);
210
227
  };
211
228
  this.getLocaleFormats = () => {
212
229
  const locales = defaultDayjs.Ls;
@@ -263,11 +280,12 @@ export class AdapterDayjs {
263
280
  }
264
281
  return value.utc();
265
282
  }
283
+
284
+ // We know that we have the UTC plugin.
285
+ // Otherwise, the value timezone would always equal "system".
286
+ // And it would be caught by the first "if" of this method.
266
287
  if (timezone === 'system') {
267
- if (this.hasUTCPlugin()) {
268
- return value.local();
269
- }
270
- return value;
288
+ return value.local();
271
289
  }
272
290
  if (!this.hasTimezonePlugin()) {
273
291
  if (timezone === 'default') {
@@ -277,8 +295,7 @@ export class AdapterDayjs {
277
295
  /* istanbul ignore next */
278
296
  throw new Error(MISSING_TIMEZONE_PLUGIN);
279
297
  }
280
- const cleanZone = timezone === 'default' ? undefined : timezone;
281
- return defaultDayjs.tz(value, cleanZone);
298
+ return defaultDayjs.tz(value, this.cleanTimezone(timezone));
282
299
  };
283
300
  this.toJsDate = value => {
284
301
  return value.toDate();
@@ -337,7 +354,7 @@ export class AdapterDayjs {
337
354
  if (value === null && comparing === null) {
338
355
  return true;
339
356
  }
340
- return this.dayjs(value).isSame(comparing);
357
+ return this.dayjs(value).toDate().getTime() === this.dayjs(comparing).toDate().getTime();
341
358
  };
342
359
  this.isSameYear = (value, comparing) => {
343
360
  return this.isSame(value, comparing, 'YYYY');
@@ -497,9 +514,10 @@ export class AdapterDayjs {
497
514
  return [0, 1, 2, 3, 4, 5, 6].map(diff => this.formatByString(start.add(diff, 'day'), 'dd'));
498
515
  };
499
516
  this.getWeekArray = value => {
500
- const cleanLocale = this.setLocaleToValue(value);
501
- const start = cleanLocale.startOf('month').startOf('week');
502
- const end = cleanLocale.endOf('month').endOf('week');
517
+ const timezone = this.getTimezone(value);
518
+ const cleanValue = this.setLocaleToValue(value);
519
+ const start = cleanValue.startOf('month').startOf('week');
520
+ const end = cleanValue.endOf('month').endOf('week');
503
521
  let count = 0;
504
522
  let current = start;
505
523
  const nestedWeeks = [];
@@ -508,6 +526,14 @@ export class AdapterDayjs {
508
526
  nestedWeeks[weekNumber] = nestedWeeks[weekNumber] || [];
509
527
  nestedWeeks[weekNumber].push(current);
510
528
  current = current.add(1, 'day');
529
+
530
+ // If the new day does not have the same offset as the old one (when switching to summer day time for example),
531
+ // Then dayjs will not automatically adjust the offset (moment does)
532
+ // We have to parse again the value to make sure the `fixOffset` method is applied
533
+ // See https://github.com/iamkun/dayjs/blob/b3624de619d6e734cd0ffdbbd3502185041c1b60/src/plugin/timezone/index.js#L72
534
+ if (this.hasTimezonePlugin() && timezone !== 'UTC' && timezone !== 'system') {
535
+ current = current.tz(this.cleanTimezone(timezone), true);
536
+ }
511
537
  count += 1;
512
538
  }
513
539
  return nestedWeeks;
@@ -529,8 +555,8 @@ export class AdapterDayjs {
529
555
  this.getMeridiemText = ampm => {
530
556
  return ampm === 'am' ? 'AM' : 'PM';
531
557
  };
532
- this.rawDayJsInstance = instance || defaultDayjs;
533
- this.dayjs = withLocale(this.rawDayJsInstance, _locale);
558
+ this.rawDayJsInstance = instance;
559
+ this.dayjs = withLocale(this.rawDayJsInstance ?? defaultDayjs, _locale);
534
560
  this.locale = _locale;
535
561
  this.formats = _extends({}, defaultFormats, formats);
536
562
  defaultDayjs.extend(weekOfYear);
@@ -178,6 +178,13 @@ export class AdapterLuxon {
178
178
  end: "'"
179
179
  };
180
180
  this.formatTokenMap = formatTokenMap;
181
+ this.setLocaleToValue = value => {
182
+ const expectedLocale = this.getCurrentLocaleCode();
183
+ if (expectedLocale === value.locale) {
184
+ return value;
185
+ }
186
+ return value.setLocale(expectedLocale);
187
+ };
181
188
  this.date = value => {
182
189
  if (typeof value === 'undefined') {
183
190
  return DateTime.local();
@@ -223,7 +230,7 @@ export class AdapterLuxon {
223
230
  if (value.zone.type === 'system') {
224
231
  return 'system';
225
232
  }
226
- return value.zoneName ?? 'system';
233
+ return value.zoneName;
227
234
  };
228
235
  this.setTimezone = (value, timezone) => {
229
236
  if (!value.zone.equals(Info.normalizeZone(timezone))) {
@@ -238,7 +245,7 @@ export class AdapterLuxon {
238
245
  return DateTime.fromISO(isoString);
239
246
  };
240
247
  this.toISO = value => {
241
- return value.toISO({
248
+ return value.toUTC().toISO({
242
249
  format: 'extended'
243
250
  });
244
251
  };
@@ -520,11 +527,12 @@ export class AdapterLuxon {
520
527
  });
521
528
  };
522
529
  this.getWeekArray = value => {
530
+ const cleanValue = this.setLocaleToValue(value);
523
531
  const {
524
532
  days
525
- } = value.endOf('month').endOf('week').diff(value.startOf('month').startOf('week'), 'days').toObject();
533
+ } = cleanValue.endOf('month').endOf('week').diff(cleanValue.startOf('month').startOf('week'), 'days').toObject();
526
534
  const weeks = [];
527
- new Array(Math.round(days)).fill(0).map((_, i) => i).map(day => value.startOf('month').startOf('week').plus({
535
+ new Array(Math.round(days)).fill(0).map((_, i) => i).map(day => cleanValue.startOf('month').startOf('week').plus({
528
536
  days: day
529
537
  })).forEach((v, i) => {
530
538
  if (i === 0 || i % 7 === 0 && i > 6) {
@@ -6,7 +6,11 @@ const formatTokenMap = {
6
6
  // Year
7
7
  Y: 'year',
8
8
  YY: 'year',
9
- YYYY: 'year',
9
+ YYYY: {
10
+ sectionType: 'year',
11
+ contentType: 'digit',
12
+ maxLength: 4
13
+ },
10
14
  // Month
11
15
  M: {
12
16
  sectionType: 'month',
@@ -232,6 +236,9 @@ export class AdapterMoment {
232
236
  return zone ?? this.moment.defaultZone?.name ?? 'system';
233
237
  };
234
238
  this.setTimezone = (value, timezone) => {
239
+ if (this.getTimezone(value) === timezone) {
240
+ return value;
241
+ }
235
242
  if (timezone === 'UTC') {
236
243
  return value.clone().utc();
237
244
  }
@@ -239,16 +246,18 @@ export class AdapterMoment {
239
246
  return value.clone().local();
240
247
  }
241
248
  if (!this.hasTimezonePlugin()) {
242
- if (timezone === 'default') {
243
- return value;
244
- }
245
-
246
249
  /* istanbul ignore next */
247
- throw new Error(MISSING_TIMEZONE_PLUGIN);
250
+ if (timezone !== 'default') {
251
+ throw new Error(MISSING_TIMEZONE_PLUGIN);
252
+ }
253
+ return value;
248
254
  }
249
255
  const cleanZone = timezone === 'default' ?
250
256
  // @ts-ignore
251
257
  this.moment.defaultZone?.name ?? 'system' : timezone;
258
+ if (cleanZone === 'system') {
259
+ return value.clone().local();
260
+ }
252
261
  const newValue = value.clone();
253
262
  newValue.tz(cleanZone);
254
263
  return newValue;
@@ -462,9 +471,9 @@ export class AdapterMoment {
462
471
  return defaultMoment.weekdaysShort(true);
463
472
  };
464
473
  this.getWeekArray = value => {
465
- const cleanLocale = this.setLocaleToValue(value);
466
- const start = cleanLocale.clone().startOf('month').startOf('week');
467
- const end = cleanLocale.clone().endOf('month').endOf('week');
474
+ const cleanValue = this.setLocaleToValue(value);
475
+ const start = cleanValue.clone().startOf('month').startOf('week');
476
+ const end = cleanValue.clone().endOf('month').endOf('week');
468
477
  let count = 0;
469
478
  let current = start;
470
479
  const nestedWeeks = [];