2016-03-28 7 views
0

Ich habe ein Eingabedatum Feld in meinem Formular. In meinem Datumsfeld i einen Fehler aufmerksam zu machen brauchen, wenn das Eingangsdatum größer als jedes Datum ist i vor hier definieren ist, was ich Code:Wie warne ich, wenn das Eingabedatum größer ist als das definierte Datum in js

$(document).ready(function() { 
    var date = new Date(2016,2,1); //the defined date is 1 March 2016 
    var day = date.getDate(); 
    var month = date.getMonth(); 
    month = month + 1; 

    if(day < 10){ 
     day = '0' + day; 
    } 

    if(month < 10){ 
     month='0'+month; 
    } 

    someday = day + '/' + month + '/' + date.getFullYear(); 

    $("#q1 input").blur(function(){ //#q1 is the ID for the input field. 
     if($('#q1 input').val() > someday){ 
      alert('the input is bigger than the defined'); 
     }else{ 
      alert('the defined is bigger than the input '); 
     } 
    }); 
}); 
+0

Wenn 'q1' id für Eingabefeld ist, dann muss ich nicht denken, Sie' # q1 verwenden input' Sie '# q1' direkt verwenden können. – Apb

+0

Sie können Date-Objekte direkt vergleichen: 'if (Datum0> Datum1) {/ * Datum0 ist nach Datum1 * /'. – RobG

Antwort

0

Sie können die Werte wie in der neuen Fassung vergleichen wollen, nicht so wie du es getan hast. Konvertieren Sie den Eingabewert in die Form des Datums und vergleichen Sie ihn mit der Variablen 'date'.

+0

Ich weiß, dass der Grund des Problems String-Format mit Datumsformat zu vergleichen ist, aber was ich nicht wissen, wie Zeichenfolge in Datumsformat konvertieren, um zwischen ihnen zu vergleichen. –

0

Vergleichen Sie das Eingabedatum mit dem von Ihnen definierten gewünschten Datum. Zum Beispiel:

var d1 = new Date(); 
var d2 = new Date(d1); 
var same = d1.getTime() === d2.getTime(); 
var notSame = d1.getTime() !== d2.getTime(); 

Wenn Sie es schwierig finden, dann gibt es eine wunderbare js Bibliothek moment.js genannt. Es ist sehr nützlich beim Spielen mit Daten.

+0

Um festzustellen, ob * d1 * vor * d2 * ist, ist es nicht schwierig: 'if (d1 RobG

0
$(document).ready(function() { 
    var date=new Date(2016,2,1); //the defined date is 1 March 2016 
    var fixedDate = returnDate(date);// convert date in dd/mm/yyyy format 

    //#q1 input will search a child input inside an #q1 dom element, which probably not the case 
    // input#q1 will refer to input with id #q1 
    // You can directly query the input since it has id #q1 so #q1 input is not correct 


$("#q1").blur(function(){ //#q1 is the ID for the input field. 
var d2 = new Date($('#q1').val()); 
var inputDate = returnDate(d2); // convert input date in dd/mm/yyyy format 

if(inputDate > fixedDate){ // compare two dates 
    console.log('the input is bigger than the defined'); 
    }else{  
    console.log('the defined is bigger than the input '); 
} 
}); 
}); 

// Write a general function to convert date in dd/mm/yyyy format 
function returnDate(date){ 
    var day=date.getDate(); 
    var month=date.getMonth(); 
    month=month+1; 
    if(day<10){ 
    day='0'+day; 
} 
    if(month<10){ 
    month='0'+month; 
} 
var someday=day+ '/' + month + '/' + date.getFullYear(); 
    return someday; 
} 

JSFIDDLE

EDIT 1

Verwenden ternärer Operator statt if-else

inputDate > fixedDate? (console.log("the input is bigger than the defined")):(console.log("the defined is bigger than the input")) 

with ternary operator

+0

Dies vergleicht zwei Strings, nicht zwei Daten, so dass jeder Datums-String mit einem größeren Tag als jeder andere Datums-String "größer" ist, unabhängig von Monat oder Jahr. – RobG

+0

Genau, aber wie konvertiert man das String-Format in das Datumsformat, um zwischen ihnen zu vergleichen –

1

Daten zu vergleichen ist Sehr einfach. Die meisten Betreiber zwingen die Operanden zu Nummer und Daten zurückkehren, um ihre Zeitwert so zu sehen, ob heute vor oder nach etwa am 1. März 2016 zwei Termine erstellen und vergleichen sie:

var epoch = new Date(2016,2,1); // Create date for 2016-03-01T00:00:00 
 
var now = new Date();   // Create a date for the current instant 
 
now.setHours(0,0,0,0);   // Set time to 00:00:00.000 
 

 
if (now < epoch) { 
 
    alert('Before 1 March, 2016'); 
 
} else { 
 
    alert('On or after 1 March, 2016'); 
 
}

Oder ein Bit kompakter:

alert((now < epoch? 'Before':'On or after') + ' 1 March, 2016'); 
+0

es ist in Ordnung, wenn ich zwischen dem aktuellen Datum (jetzt) ​​und dem definierten Datum vergleichen möchte. aber das Problem, das ich gegenüberstelle, ist, dass ich Eingabefeld in meiner Form habe, es ist Typ ist Text so Datum in diesem Feld ist Zeichenkettenformat, irgendeine Weise, es bis Datum zu konvertieren, dann zwischen zwei Daten zu vergleichen? –

+0

@ M.Gooda - siehe die akzeptierte Antwort auf [* javascript Date.parse *] (http://stackoverflow.com/questions/2587345/javascript-date-parse/2587398#2587398). – RobG

Verwandte Themen