diff --git a/packages/devkit/lib/common/utils/DateUtil.ts b/packages/devkit/lib/common/utils/DateUtil.ts index 8ea62599c54e9473b46f72c0e88b049406b2aadd..e0f937f851a8062c59f00c71e054d11cf58392e8 100644 --- a/packages/devkit/lib/common/utils/DateUtil.ts +++ b/packages/devkit/lib/common/utils/DateUtil.ts @@ -1,4 +1,4 @@ -import { format, isDate, parseISO, isEqual } from 'date-fns'; +import { format, isDate, parseISO, parse } from 'date-fns'; import { StringUtil } from './StringUtil'; /** * 日期工具类 @@ -38,7 +38,7 @@ class DateUtil { /** * 解析日期字符串 */ - public static parse(date: string | Date): Date | null { + public static parse(date: string | Date, format?: string): Date | null { if (this.isEmptyDate(date) === true) { return null; } @@ -46,8 +46,12 @@ class DateUtil { if (this.isDate(date) === true) { return date as Date; } - - const parsedDate = parseISO(date as string); + let parsedDate = null; + if (format) { + parsedDate = parse(date as string, format, new Date()); + } else { + parsedDate = parseISO(date as string); + } if (isNaN(parsedDate.getTime())) { return null; } diff --git a/packages/devkit/lib/store/form/validation/types.ts b/packages/devkit/lib/store/form/validation/types.ts index f989651567c9b777ba6a2bcada406a6f03bb3d38..d8ae96a8dc439e544bdd0ed6d4c1b44c2e39b02e 100644 --- a/packages/devkit/lib/store/form/validation/types.ts +++ b/packages/devkit/lib/store/form/validation/types.ts @@ -62,6 +62,7 @@ interface MinValueValidationRule extends ValidationRule { interface MaxDateValidationRule extends ValidationRule { name: 'maxDate', maxDate: Date | string; + format: string; } /** @@ -70,6 +71,7 @@ interface MaxDateValidationRule extends ValidationRule { interface MinDateValidationRule extends ValidationRule { name: 'minDate' minDate: Date | string; + format: string; } /** diff --git a/packages/devkit/lib/store/form/validation/validators/max-date-validator.ts b/packages/devkit/lib/store/form/validation/validators/max-date-validator.ts index 0b7f9d3d86dc913a91f22b0301948d833909e6ff..bccf172a861029d5a6b49beaf276067342605029 100644 --- a/packages/devkit/lib/store/form/validation/validators/max-date-validator.ts +++ b/packages/devkit/lib/store/form/validation/validators/max-date-validator.ts @@ -31,9 +31,9 @@ class MaxDateValidator extends BaseValidator { return null; } - let { name, maxDate, message } = rule; + let { name, maxDate, message, format } = rule; - value = DateUtil.parse(value) as Date; + value = DateUtil.parse(value, format) as Date; maxDate = DateUtil.parse(maxDate) as Date; // 无法转换成日期对象的字符串,不校验 diff --git a/packages/devkit/lib/store/form/validation/validators/min-date-validator.ts b/packages/devkit/lib/store/form/validation/validators/min-date-validator.ts index 897a2ebe6da8436d996e530c5555739f453470d9..2656808150f2f5c4a15a267fcbb53ae9899a61ea 100644 --- a/packages/devkit/lib/store/form/validation/validators/min-date-validator.ts +++ b/packages/devkit/lib/store/form/validation/validators/min-date-validator.ts @@ -31,8 +31,8 @@ class MinDateValidator extends BaseValidator { return null; } - let { name, minDate, message } = rule; - value = DateUtil.parse(value) as Date; + let { name, minDate, message, format } = rule; + value = DateUtil.parse(value, format) as Date; minDate = DateUtil.parse(minDate) as Date; // 无法转换成日期对象的字符串,不校验 diff --git a/packages/renderer/src/config-builders/form/validation-rule-creator.ts b/packages/renderer/src/config-builders/form/validation-rule-creator.ts index 452b90059909f009b8707d1b1f06170385defdc9..87891f57faaa9be40008ead94d6ba1538b615f4f 100644 --- a/packages/renderer/src/config-builders/form/validation-rule-creator.ts +++ b/packages/renderer/src/config-builders/form/validation-rule-creator.ts @@ -131,7 +131,7 @@ class ValidationRuleCreator { * 最大日期 */ public maxDate(controlNode: any): MaxDateValidationRule | undefined { - const { maxDate } = controlNode.editor; + const { maxDate, valueFormat: format } = controlNode.editor; if (!this.isValidValue(maxDate)) { return; } @@ -140,14 +140,14 @@ class ValidationRuleCreator { const originalMessage = LocaleService.translate('maxDate'); const message = originalMessage.replace(/\$property/g, displayName).replace(/\$constraint1/g, maxDate); - return { name: 'maxDate', maxDate, message }; + return { name: 'maxDate', maxDate, message, format }; } /** * 最小日期 */ public minDate(controlNode: any): MinDateValidationRule | undefined { - const { minDate } = controlNode.editor; + const { minDate, valueFormat: format } = controlNode.editor; if (!this.isValidValue(minDate)) { return; } @@ -156,7 +156,7 @@ class ValidationRuleCreator { const originalMessage = LocaleService.translate('minDate'); const message = originalMessage.replace(/\$property/g, displayName).replace(/\$constraint1/g, minDate); - return { name: 'minDate', minDate, message }; + return { name: 'minDate', minDate, message, format }; } /**