113 votes

Valider que la date de fin est supérieure à la date de début avec jQuery

Comment vérifier/valider en jQuery si la date de fin [zone de texte] est supérieure à la date de début [zone de texte] ?

0 votes

Il existe une solution : stackoverflow.com/questions/17169772/

183voto

Mike E. Points 1053

Je développe juste la réponse de Fusion. Cette méthode d'extension fonctionne en utilisant le plugin jQuery validate. Il validera les dates et les nombres

jQuery.validator.addMethod("greaterThan", 
function(value, element, params) {

    if (!/Invalid|NaN/.test(new Date(value))) {
        return new Date(value) > new Date($(params).val());
    }

    return isNaN(value) && isNaN($(params).val()) 
        || (Number(value) > Number($(params).val())); 
},'Must be greater than {0}.');

Pour l'utiliser :

$("#EndDate").rules('add', { greaterThan: "#StartDate" });

o

$("form").validate({
    rules: {
        EndDate: { greaterThan: "#StartDate" }
    }
});

0 votes

Comment l'utiliser avec deux zones de texte ?

1 votes

J'ai dû le modifier légèrement pour permettre des dates de fin vierges dans mon application, mais cela a fait l'essentiel. code if (value == 0) { return true ; } else if (!/Invalid|NaN/... code

3 votes

Avertissement de BUG : Je réalise que la question porte sur les dates, mais ce code ne fonctionnera pas pour les chiffres comme annoncé. J'ai ajouté une réponse en expliquant le pourquoi et le comment, ce qui inclut également la réparation.

87voto

Shane O'Grady Points 1758
var startDate = new Date($('#startDate').val());
var endDate = new Date($('#endDate').val());

if (startDate < endDate){
// Do something
}

Cela devrait le faire, je pense.

1 votes

N'est-ce pas ? Merci ! Pas besoin de plugin :P

1 votes

Agréable et facile à mettre en œuvre, bien que jQuery.validate soit génial

0 votes

Merci beaucoup si facile.

20voto

Kamran Ahmed Points 1359

Je suis arrivé un peu tard à la fête mais voici ma partie

Date.parse(fromDate) > Date.parse(toDate)

Voici le détail :

var from = $("#from").val();
var to = $("#to").val();

if(Date.parse(from) > Date.parse(to)){
   alert("Invalid Date Range");
}
else{
   alert("Valid date Range");
}

15voto

Russell Giddings Points 2609

Référence jquery.validate.js et jquery-1.2.6.js. Ajoutez une classe startDate à votre zone de texte de date de début. Ajoutez une classe endDate à votre zone de texte de date de fin.

Ajoutez ce bloc script à votre page:-.

<script type="text/javascript">
    $(document).ready(function() {
        $.validator.addMethod("endDate", function(value, element) {
            var startDate = $('.startDate').val();
            return Date.parse(startDate) <= Date.parse(value) || value == "";
        }, "* End date must be after start date");
        $('#formId').validate();
    });
</script>

J'espère que cela vous aidera :-)

0 votes

J'aime cette technique

13voto

Jon Points 194296

J'étais juste en train de bricoler La réponse de danteuno et j'ai constaté que, bien que partant d'une bonne intention, il ne fonctionne malheureusement pas sur plusieurs navigateurs qui sont no IE. En effet, IE sera assez strict quant à ce qu'il accepte comme argument de la fonction Date mais d'autres ne le feront pas. Par exemple, Chrome 18 donne

> new Date("66")
  Sat Jan 01 1966 00:00:00 GMT+0200 (GTB Standard Time)

Le code prend alors le chemin de la "comparaison des dates" et tout se dégrade à partir de là (ex. new Date("11") est supérieure à new Date("66") et c'est évidemment le contraire de l'effet recherché).

Par conséquent, après réflexion, j'ai modifié le code pour donner la priorité au chemin "numbers" sur le chemin "dates" et valider que l'entrée est bien numérique avec l'excellente méthode fournie dans Valider les nombres décimaux en JavaScript - IsNumeric() .

Au final, le code devient :

$.validator.addMethod(
    "greaterThan",
    function(value, element, params) {
        var target = $(params).val();
        var isValueNumeric = !isNaN(parseFloat(value)) && isFinite(value);
        var isTargetNumeric = !isNaN(parseFloat(target)) && isFinite(target);
        if (isValueNumeric && isTargetNumeric) {
            return Number(value) > Number(target);
        }

        if (!/Invalid|NaN/.test(new Date(value))) {
            return new Date(value) > new Date(target);
        }

        return false;
    },
    'Must be greater than {0}.');

0 votes

Cela fonctionne dans ie mais je n'arrive pas à le faire fonctionner dans opera et FF, des idées ?

0 votes

:L'erreur de validation apparaît même si la date de fin sélectionnée est postérieure à la date de début sélectionnée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X