Home > Software engineering >  How to check credit card expiration date?
How to check credit card expiration date?

Time:06-17

The user fills in the credit card information. I want the validation to work if the user enters the expiration date before today. But the input is as follows; mm/yy . However, the user enters the last 2 digits of the year. For example, let's say the user enters the expiration date as 06/21. Today's date is 06/22. In this case validation should work. I need to check the month and year the user entered. I want to show error message if user enter wrong date. I've been searching but can't integrate it.

How can I solve this problem?

const [errorList, setErrorList] = useState({
  expDateValidationStateError: true,
});

const [expDateValidationState, setExpDateValidationState] = useState({
  error: false,
  helperText: '',
});

const expDateOnChange = (event) => {
  if (expDateValidator(event.target.value)) {
    setExpDateValidationState({ error: false, helperText: '' });
    setErrorList({ ...errorList, expDateValidationStateError: false });
  } else {
    setExpDateValidationState({ error: true, helperText: t('payment-credit-card.error-messages.exp_date') });
    setErrorList({ ...errorList, expDateValidationStateError: true });
  }
};

CodePudding user response:

Here is the code:

const ccExpired = (date)=>{
    const dateArr = date.split('/');
    const exYear =  dateArr[1]   2000;
    const exMonth =  dateArr[0] - 1; // JS months start with 0

    const exDay = new Date(exYear,exMonth   1,0).getDate();
    const dateObj = new Date(exYear,exMonth,exDay - 2); // Timezones fix.
    const dateNow = new Date();
    return dateNow > dateObj;
}
console.log("2/22 "   ccExpired('2/22'));
console.log("3/33 "   ccExpired('3/33'));

//This is for SO debug only, ignore.
const currentMonth = (new Date().getMonth()   1);
const currentYear = (new Date().getFullYear()).toString().replace(/^20/, '');
const thisMonth = `${currentMonth}/${currentYear}`;
const lastMonth = `${(currentMonth-1)}/${currentYear}`;
const nextMonth = `${(currentMonth 1)}/${currentYear}`;
console.log(thisMonth   " "   ccExpired(thisMonth));
console.log(lastMonth   " "   ccExpired(lastMonth));
console.log(nextMonth   " "   ccExpired(nextMonth));

CodePudding user response:

Or perhaps

const isCCExpired = str => {
  const [mm,yy] = str.split("/");
  const dateObj = new Date( yy   2000,mm-1,15); // months are 0 based and don't take the 1st due to timezones
  console.log(dateObj);
  return dateObj.getTime() < new Date().getTime();
};
console.log("3/22",isCCExpired('3/22'));
console.log("3/23",isCCExpired('3/23'));

  • Related