終了日[テキストボックス]が開始日[テキストボックス]より大きいかどうかをjQueryで確認/検証するにはどうすればよいですか?
16 に答える
フュージョンを拡張するだけで答えが得られます。この拡張メソッドは、jQuery検証プラグインを使用して機能します。日付と数字を検証します
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}.');
それを使用するには:
$("#EndDate").rules('add', { greaterThan: "#StartDate" });
また
$("form").validate({
rules: {
EndDate: { greaterThan: "#StartDate" }
}
});
var startDate = new Date($('#startDate').val());
var endDate = new Date($('#endDate').val());
if (startDate < endDate){
// Do something
}
それでいいと思います
パーティーに少し遅れましたが、ここに私の部分があります
Date.parse(fromDate) > Date.parse(toDate)
詳細は次のとおりです。
var from = $("#from").val();
var to = $("#to").val();
if(Date.parse(from) > Date.parse(to)){
alert("Invalid Date Range");
}
else{
alert("Valid date Range");
}
jquery.validate.jsおよびjquery-1.2.6.jsを参照してください。startDateクラスを開始日テキストボックスに追加します。endDateクラスを終了日テキストボックスに追加します。
このスクリプトブロックをページに追加します:-
<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>
お役に立てれば :-)
私はちょうどdanteunoの答えをいじくり回していて、善意であるが、悲しいことに、IEではないいくつかのブラウザで壊れていることに気づきました。Date
これは、IEがコンストラクターへの引数として受け入れるものについて非常に厳密になるが、他のIEはそうではないためです。たとえば、Chrome18は
> new Date("66")
Sat Jan 01 1966 00:00:00 GMT+0200 (GTB Standard Time)
これにより、コードは「日付の比較」パスをたどり、そこからすべてが下り坂になります(たとえばnew Date("11")
、より大きくnew Date("66")
、これは明らかに望ましい効果の反対です)。
したがって、検討した後、「日付」パスよりも「数値」パスを優先するようにコードを変更し、JavaScriptの10進数の検証-IsNumeric()で提供される優れたメソッドを使用して、入力が実際に数値であることを検証しました。
最終的に、コードは次のようになります。
$.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}.');
したがって、このルールはオプションである必要があり、上記の提案はいずれもオプションではありません。メソッドを呼び出すと、値が必要になるように設定しても、必要に応じて表示されます。
これは私の電話です:
$("#my_form").validate({
rules: {
"end_date": {
required: function(element) {return ($("#end_date").val()!="");},
greaterStart: "#start_date"
}
}
});//validate()
私addMethod
はMikeE.の最高評価の回答ほど堅牢ではありませんが、JqueryUIdatepickerを使用して日付を強制的に選択しています。誰かが日付が数字であることを確認する方法を教えてくれ、メソッドをオプションにすることができればそれは素晴らしいことですが、今のところこのメソッドは私にとってはうまくいきます:
jQuery.validator.addMethod("greaterStart", function (value, element, params) {
return this.optional(element) || new Date(value) >= new Date($(params).val());
},'Must be greater than start date.');
テキストフィールドの日付値は、jqueryの.val()メソッドで取得できます。
var datestr1 = $('#datefield1-id').val();
var datestr2 = $('#datefield2-id').val();
日付文字列を比較する前に解析することを強くお勧めします。JavascriptのDateオブジェクトにはparse()-メソッドがありますが、サポートされるのは米国の日付形式(YYYY / MM / DD)のみです。UNIXエポックの開始からのミリ秒を返すため、値を>または<と簡単に比較できます。
さまざまな形式(ISO 8661など)が必要な場合は、正規表現または無料のdate.jsライブラリを使用する必要があります。
スーパーユーザーになりたい場合は、テキストフィールドの代わりにjqueryuidatepickersを使用できます。日付範囲を入力できるdatepickerバリアントがあります。
http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/
javascript / jqueryでは、ほとんどの開発者は、日付形式に変換せずに、文字列である開始日と終了日の比較を使用します。日付から比較する最も簡単な方法は、現在よりも優れています。
Date.parse(fromDate) > Date.parse(toDate)
正確な結果を得るには、比較の前に常に日付と日付を解析してください
jQuery('#from_date').on('change', function(){
var date = $(this).val();
jQuery('#to_date').datetimepicker({minDate: date});
});
私が使用しているのはフランツが言ったことです:P
var date_ini = new Date($('#id_date_ini').val()).getTime();
var date_end = new Date($('#id_date_end').val()).getTime();
if (isNaN(date_ini)) {
// error date_ini;
}
if (isNaN(date_end)) {
// error date_end;
}
if (date_ini > date_end) {
// do something;
}
$(document).ready(function(){
$("#txtFromDate").datepicker({
minDate: 0,
maxDate: "+60D",
numberOfMonths: 2,
onSelect: function(selected) {
$("#txtToDate").datepicker("option","minDate", selected)
}
});
$("#txtToDate").datepicker({
minDate: 0,
maxDate:"+60D",
numberOfMonths: 2,
onSelect: function(selected) {
$("#txtFromDate").datepicker("option","maxDate", selected)
}
});
});
またはこのリンクにアクセス
function endDate(){
$.validator.addMethod("endDate", function(value, element) {
var params = '.startDate';
if($(element).parent().parent().find(params).val()!=''){
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) > new Date($(element).parent().parent().find(params).val());
}
return isNaN(value) && isNaN($(element).parent().parent().find(params).val()) || (parseFloat(value) > parseFloat($(element).parent().parent().find(params).val())) || value == "";
}else{
return true;
}
},jQuery.format('must be greater than start date'));
}
function startDate(){
$.validator.addMethod("startDate", function(value, element) {
var params = '.endDate';
if($(element).parent().parent().parent().find(params).val()!=''){
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) < new Date($(element).parent().parent().parent().find(params).val());
}
return isNaN(value) && isNaN($(element).parent().parent().find(params).val()) || (parseFloat(value) < parseFloat($(element).parent().parent().find(params).val())) || value == "";
}
else{
return true;
}
}, jQuery.format('must be less than end date'));
}
これがお役に立てば幸いです:)
まず、split関数を使用して2つの入力ボックスの値を分割します。次に、同じものを逆の順序で連結します。連結後、整数に解析します。次に、ifステートメントの2つの値を比較します。例:1> 20-11-2018 2> 21-11-2018
比較のために新しい値を分割して連結した後20181120と20181121その後は同じものを比較します。
var date1 = $('#datevalue1').val();
var date2 = $('#datevalue2').val();
var d1 = date1.split("-");
var d2 = date2.split("-");
d1 = d1[2].concat(d1[1], d1[0]);
d2 = d2[2].concat(d2[1], d2[0]);
if (parseInt(d1) > parseInt(d2)) {
$('#fromdatepicker').val('');
} else {
}
これはうまくいくはずです
$.validator.addMethod("endDate", function(value, element) {
var startDate = $('#date_open').val();
return Date.parse(startDate) <= Date.parse(value) || value == "";
}, "* End date must be after start date");
このようなアラートのために2つの異なる日付で行うことができます。
$('#end_date').on('change', function(){
var startDate = $('#start_date').val();
var endDate = $('#end_date').val();
if (endDate < startDate){
alert('End date should be greater than Start date.');
$('#end_date').val('');
}
});
カレンダーで実行することもできますが、以前の日付は自動的に無効になります。
$("#start_date").datepicker({
dateFormat: 'dd/mm/yy',
onSelect: function(date) {
$("#end_date").datepicker('option', 'minDate', date);
}
});
$("#end_date").datepicker({ dateFormat: 'dd/mm/yy' });
フォーマットが正しいYYYY/MM / DDであり、2つのフィールド間でまったく同じであることが保証されている場合は、次を使用できます。
if (startdate > enddate) {
alert('error'
}
文字列比較として