import { registerDecorator, ValidationArguments, ValidationOptions, ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator'; export function IsInRangeOfDate(min:number, max:number,validationOptions?: ValidationOptions) { return (object: any, propertyName: string) => { registerDecorator({ target: object.constructor, propertyName, options: validationOptions, constraints: [new Date(min).toLocaleDateString('en-US'), new Date(max).toLocaleDateString('en-US'), min, max], validator: IsInRangeOfDateConstraint, }); }; } @ValidatorConstraint({ name: 'IsInRangeOfDate' }) export class IsInRangeOfDateConstraint implements ValidatorConstraintInterface { validate(value: any, validationArguments: ValidationArguments) { // console.log(typeof value) // console.log(value) // console.log(validationArguments) try { value = parseInt(value) if (typeof value === "number" && value >= validationArguments.constraints[2] && value <= Date.now()) { validationArguments.constraints[1] = new Date(validationArguments.constraints[3]).toLocaleDateString('en-US') return true } else { return false } } catch (error) { return false } } defaultMessage(validationArguments?: ValidationArguments): string { return "validation.INVALID_RANGE_OF_DATE" // return "{"+validationArguments.property + "} " + "response.message.phoneFormatIsWrong } }