getDefaultPickerDate.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { addMonths, Locale as dateFnsLocale } from 'date-fns';
  2. import isValidDate from './isValidDate';
  3. import { compatibleParse } from './parser';
  4. import isTimestamp from './isTimestamp';
  5. /**
  6. * get left panel picker date and right panel picker date
  7. */
  8. export default function getDefaultPickerDate(options: GetDefaultPickerValueDateOptions) {
  9. const { defaultPickerValue, format, dateFnsLocale } = options;
  10. let nowDate = Array.isArray(defaultPickerValue) ? defaultPickerValue[0] : defaultPickerValue;
  11. let nextDate = Array.isArray(defaultPickerValue) ? defaultPickerValue[1] : undefined;
  12. switch (true) {
  13. case isValidDate(nowDate):
  14. break;
  15. case isTimestamp(nowDate):
  16. nowDate = new Date(nowDate);
  17. break;
  18. case typeof nowDate === 'string':
  19. nowDate = compatibleParse(nowDate as string, format, undefined, dateFnsLocale);
  20. break;
  21. default:
  22. nowDate = new Date();
  23. break;
  24. }
  25. switch (true) {
  26. case isValidDate(nextDate):
  27. break;
  28. case isTimestamp(nextDate):
  29. nextDate = new Date(nextDate);
  30. break;
  31. case typeof nextDate === 'string':
  32. nextDate = compatibleParse(nextDate as string, format, undefined, dateFnsLocale);
  33. break;
  34. default:
  35. nextDate = addMonths(nowDate as Date, 1);
  36. break;
  37. }
  38. return {
  39. nowDate: nowDate as Date,
  40. nextDate: nextDate as Date,
  41. };
  42. }
  43. type BaseValueType = string | number | Date;
  44. interface GetDefaultPickerValueDateOptions {
  45. defaultPickerValue?: BaseValueType | BaseValueType[];
  46. format: string;
  47. dateFnsLocale: dateFnsLocale
  48. }