2010-07-09 3 views
2

Je ne peux pas sembler obtenir ce droit, je peux l'obtenir pour attraper une date antérieure, mais ne pas retourner vrai à date future.Je viens de besoin de valider l'expiration de ma carte de crédit Date comme étant dans le futur, cela ne fonctionne pas, des idées? la date doit être au format MM/YYYY avec un "/" entre eux.jQuery valider date d'expiration de la carte de crédit comme date future

$.validator.addMethod(
"FutureDate", 
function(value, element) { 
    var startdatevalue = (.getMonth/.getYear); 
    return Date.parse(startdatevalue) < Date.parse($("#ExpirationDate").val()); 
}, 
    "End Date should be greater than Start Date." 
); 

Répondre

1

Vous n'êtes pas en train de l'obtenir pour attraper une date antérieure. Si vous passez une date comme celle-ci "11/2010" à votre Date.parse(), elle renvoie NaN (ou Not a Number), ce qui est l'équivalent logique du renvoi false.

Essayez de faire cela pour voir ce que je veux dire:

alert(Date.parse('11/2010')); 

Si vous ajoutez un numéro de jour, il devrait fonctionner. Quelque chose comme:

var startdatevalue = '11/1/2010'; 

Bien sûr, cet exemple utilise une date codée en dur. Si les valeurs sont stockées sous forme de 11/2010, vous pouvez essayer quelque chose comme ceci:

// Get the index of the "/" 
var separatorIndex = value.indexOf('/'); 

    // Add "/1" before the separatorIndex so we end up with MM/1/YYYY 
var startDate = value.substr(0, separatorIndex) + '/1' + value.substr(separatorIndex); 

    // Do the same with the expiration date 
var expDate = $("#ExpirationDate").val(); 
separatorIndex = expDate.indexOf('/'); 
expDate = expDate.substr(0, separatorIndex) + '/1' + expDate.substr(separatorIndex); 

    // Return the comparison 
return Date.parse(startDate) < Date.parse(expDate); 
+0

@Patrick, je teste le maintenant au-dessus. Je ne suis pas sûr pourquoi j'ai besoin d'ajouter le "/ 1" à la date. La date ne peut être saisie que MM/AAAA et je dois juste valider que MM/AAAA est en avance par rapport au MM/AAAA actuel –

+0

@Dirty - La raison en est que 'Date.parse()' n'accepte pas ' MM/YYYY', donc nous ajoutons juste un numéro de jour pour le rendre heureux. C'est juste une solution temporaire pour faire fonctionner votre format avec 'Date.parse()'. Il ne change pas finalement la valeur d'entrée. – user113716

+0

@Patrick - Intéressant ... En supposant que vous avez entré 07/2015 comme date, (J'ai utilisé le code ci-dessus et bloqué dans une alerte (startDate), et une alerte (expDate);) Les deux dates sont les mêmes, sauf par exemple , startDate val = 7/1/2015 et expDate = 07/2015. Il renvoie false, il ne semble pas comparer la date actuelle (aujourd'hui) avec l'exp. date, même si le retour Date.parse .... semble correct –

Questions connexes