-1

I know how to validate date, but how to validate the date is not expired? It should greater than current year.

function validate(){
    var errMsg = "";
    var result = true;
    var visa = document.getElementById("visa").checked;
    var mastercard = document.getElementById("mastercard").checked;
    var american_express = document.getElementById("american_express").checked;
    if(!(visa || mastercard || american_express)){
        errMsg += "please select at least one card type.\n";
        result = false;
    }

    var name = document.getElementById("holder_name").value;
    if(!name.match(/^[a-zA-Z]{1,30}$/)){
        errMsg += "Please enter a name maximum of 30 characters, alphabetical only.\n";
        result = false;
    }

    var cardNumber = document.getElementById("card_number").value;
    if(!cardNumber.match(/\d{15,16}$/)){
        errMsg += "The card number should be 15 or 16 digits!\n";
        result = false;
    }
    else{
        var errorMsg = checkCardWithType(cardNumber);
        if(errorMsg != ""){
            errMsg += errorMsg;
            result = false;
        }
    }

    var expire = document.getElementById("expire").value;
    if(!expire.match(/(0[1-9]|1[0-2])[-][0-9]{2}/)){
        errMsg += "The expire date formate is not correct!\n";
        result = false;
    }

    if(errMsg != ""){
        alert(errMsg);
    }

   return result;
}
Biffen
  • 6,249
  • 6
  • 28
  • 36
CEz
  • 43
  • 1
  • 7

2 Answers2

5

Get the current year and month, parse the input, and compare the values:

var expire = document.getElementById("expire").value;
if(!expire.match(/(0[1-9]|1[0-2])[-][0-9]{2}/)){
  errMsg += "The expire date formate is not correct!\n";
  result = false;
} else {
  // get current year and month
  var d = new Date();
  var currentYear = d.getFullYear();
  var currentMonth = d.getMonth() + 1;
  // get parts of the expiration date
  var parts = expire.split('-');
  var year = parseInt(parts[1], 10) + 2000;
  var month = parseInt(parts[0], 10);
  // compare the dates
  if (year < currentYear || (year == currentYear && month < currentMonth)) {
    errMsg += "The expiry date has passed.\n";
    result = false;
  }
}
Guffa
  • 687,336
  • 108
  • 737
  • 1,005
0

Well, If you get the expiry date as in "06-19" Wouldn't it be as easy as this?

var expiry = "06-19";
var stillValid = (new Date("01-" + expiry).getTime() > new Date().getTime());
Lars Anundskås
  • 1,345
  • 10
  • 24