util.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
  2. if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
  3. if (ar || !(i in from)) {
  4. if (!ar) ar = Array.prototype.slice.call(from, 0, i);
  5. ar[i] = from[i];
  6. }
  7. }
  8. return to.concat(ar || Array.prototype.slice.call(from));
  9. };
  10. import dayjs from 'dayjs';
  11. function getArray(start, end, format) {
  12. var res = [];
  13. for (var i = 0; i < end - start + 1; i++) {
  14. res.push({ label: format(start + i), value: start + i });
  15. }
  16. return res;
  17. }
  18. var precisionLengthRecord = {
  19. year: 1,
  20. month: 2,
  21. day: 3,
  22. hour: 4,
  23. minute: 5,
  24. second: 6,
  25. };
  26. function getYears(min, max, format) {
  27. return getArray(min.year(), max.year(), format.bind(null, 'year'));
  28. }
  29. function getMonths(min, max, currentPicker, format) {
  30. var start = 1;
  31. var end = 12;
  32. if (currentPicker
  33. .clone()
  34. .set('month', start - 1)
  35. .isBefore(min)) {
  36. start = min.month() + 1;
  37. }
  38. if (currentPicker
  39. .clone()
  40. .set('month', end - 1)
  41. .isAfter(max)) {
  42. end = max.month() + 1;
  43. }
  44. return getArray(start, end, format.bind(null, 'month'));
  45. }
  46. function getDates(min, max, currentPicker, format) {
  47. var start = 1;
  48. var end = currentPicker.daysInMonth();
  49. if (currentPicker.clone().set('date', start).isBefore(min)) {
  50. start = min.date();
  51. }
  52. if (currentPicker.clone().set('date', end).isAfter(max)) {
  53. end = max.date();
  54. }
  55. return getArray(start, end, format.bind(null, 'day'));
  56. }
  57. function getHours(min, max, currentPicker, format) {
  58. var start = 0;
  59. var end = 23;
  60. if (currentPicker.clone().set('hour', start).isBefore(min)) {
  61. start = min.hour();
  62. }
  63. if (currentPicker.clone().set('hour', end).isAfter(max)) {
  64. end = max.hour();
  65. }
  66. return getArray(start, end, format.bind(null, 'hour'));
  67. }
  68. function getMinutes(min, max, currentPicker, format) {
  69. var start = 0;
  70. var end = 59;
  71. if (currentPicker.clone().set('minute', start).isBefore(min)) {
  72. start = min.minute();
  73. }
  74. if (currentPicker.clone().set('minute', end).isAfter(max)) {
  75. end = max.minute();
  76. }
  77. return getArray(start, end, format.bind(null, 'minute'));
  78. }
  79. function getSeconds(min, max, currentPicker, format) {
  80. var start = 0;
  81. var end = 59;
  82. if (currentPicker.clone().set('second', start).isBefore(min)) {
  83. start = min.second();
  84. }
  85. if (currentPicker.clone().set('second', end).isAfter(max)) {
  86. end = max.second();
  87. }
  88. return getArray(start, end, format.bind(null, 'second'));
  89. }
  90. export function getRangeData(precision, min, max, currentPickerDay, format) {
  91. var data = [];
  92. var len = precisionLengthRecord[precision];
  93. if (!len)
  94. return [];
  95. for (var i = 0; i < len; i++) {
  96. switch (i) {
  97. case 0:
  98. data.push(getYears(min, max, format));
  99. break;
  100. case 1:
  101. data.push(getMonths(min, max, currentPickerDay, format));
  102. break;
  103. case 2:
  104. data.push(getDates(min, max, currentPickerDay, format));
  105. break;
  106. case 3:
  107. data.push(getHours(min, max, currentPickerDay, format));
  108. break;
  109. case 4:
  110. data.push(getMinutes(min, max, currentPickerDay, format));
  111. break;
  112. case 5:
  113. data.push(getSeconds(min, max, currentPickerDay, format));
  114. break;
  115. }
  116. }
  117. return data;
  118. }
  119. /**
  120. * 选中的值转换为时间类型,主要处理month从0开始的情况
  121. * @param value
  122. * @returns
  123. */
  124. export function getDateByValue(value) {
  125. //@ts-ignore
  126. return new (Date.bind.apply(Date, __spreadArray([void 0], value.map(function (v, i) { return String(i === 1 ? v - 1 : v); }), false)))();
  127. }
  128. /**
  129. * date转换为value数组
  130. * @param value
  131. * @returns
  132. */
  133. export function getValueByDate(date, precision) {
  134. var fields = [
  135. 'getFullYear',
  136. 'getMonth',
  137. 'getDate',
  138. 'getHours',
  139. 'getMinutes',
  140. 'getSeconds',
  141. ];
  142. var value = [];
  143. for (var i = 0; i < precisionLengthRecord[precision]; i++) {
  144. value.push(date[fields[i]]());
  145. if (i === 1) {
  146. value[1] = value[1] + 1;
  147. }
  148. }
  149. return value;
  150. }
  151. /**
  152. * 是否有效日期,主要处理月份对应可选日期,避免当前时间日期超出当月最后一天
  153. * @param value
  154. */
  155. export function getValidValue(value) {
  156. if (value.length > 2) {
  157. var maxDate = new Date(value[0], value[1], 0).getDate();
  158. if (value[2] > maxDate) {
  159. value = value.slice();
  160. value[2] = maxDate;
  161. }
  162. }
  163. return value;
  164. }
  165. /**
  166. * 比较两个date是否是同一时间
  167. * @param date1
  168. * @param date2
  169. */
  170. export function isEqualDate(date1, date2) {
  171. if (date1 instanceof Date && date2 instanceof Date) {
  172. return dayjs(date1).isSame(date2);
  173. }
  174. return date1 === date2;
  175. }