2016-05-26 17 views
0

ここにこのトピックについて多くの質問がありますが、私の問題点については誰も知りません。
開始時刻と終了時刻を比較する

このスクリプトは、ユーザーが日付と開始時刻と終了時刻を選択して予約する予約用です。 私は、日付セレクタの入力フィールドと2つの時間セレクタの入力フィールドを持つフォームを持っています.1つは開始時間、もう1つは終了時間です。

私が予約スクリプトを書いている店は、午後17時から午前1時の間に開かれているのが問題です。したがって、誰かが23:00〜01:00に予約している場合、開始時間は常に大きく表示され、フォームが検証されません。

解決策があるかどうか、またはこれを行うことができるバリデータがあるかどうかは誰にも分かりません。

注:時間を比較したいだけで、別の日付フィールドを追加したくありません。

enter image description here

var timeto=$('#timeto').val(); 
var timefrom=$('#timefrom').val(); 
     if(timefrom>timeto){ 
      alert('start time should be smaller') 
     } 

time from 23:00とtime toであれば、警告が表示されているよりも、午後12時00分ですが、現実午後12時00分に23時

+1

はあなたのコードを表示します。.. – choz

+1

は、あなたがこれまでに試したものをご提示ください。 –

+0

@ObjectManipulator私は編集を行いましたが、これまでに試したコードは単なるコンパイルです。 – DevMan

答えて

2

オブジェクトの作成中に1時間だけ差し引くだけです。

var timefrom = new Date(); 
temp = $('#timefrom').val();.split(":"); 
timefrom.setHours((parseInt(temp[0]) - 1 + 24) % 24); 
timefrom.setMinutes(parseInt(temp[1])); 

var timeto = new Date(); 
temp = $('#timeto').val().split(":"); 
timeto.setHours((parseInt(temp[0]) - 1 + 24) % 24); 
timeto.setMinutes(parseInt(temp[1])); 

if (timeto < timefrom) 
    alert('start time should be smaller'); 
+0

あなたの答えが完璧に働いてくれてありがとう。私が理解する限り、終了時刻を例えば01:00に計算したい場合は、-1から-2にしなければならない。そうですか? – DevMan

+0

はい。あなたが正しいです。両方の時間は00:00-23-59の範囲でなければなりません – splash58

+0

ありがとう!!!!大きな助け – DevMan

0

よりも長い時間でありますあなたの時間は文字列として保存されるので、それらをDateに解析して比較することができます。

var timeto=$('#timeto').val(); 
var timefrom=$('#timefrom').val(); 
    if(Date.parse(timefrom) > Date.parse(timeto) > true){ 
     alert('start time should be smaller') 
    } 
0

私はより簡単に比較するには、時間をDateTimeとすべきだと思います。これを試してください:

var end_time=$('#timeto').val(); 
var start_time =$('#timefrom').val(); 

var stt = new Date("May 26, 2016 " + start_time); 
stt = stt.getTime(); 

var endt= new Date("May 26, 2016 " + end_time); 
endt = endt.getTime(); 
if(stt >endt){ 
    //do something 
} 
1
// get the times as strings 
start_string = $('#timefrom').val();  
end_string = $('#timeto').val(); 

// define an arbitrary start time since you are only comparing hours 
start_time = new Date("May 26, 2016 " + start_string); 

// define the end time as the same date + end time 
end_time = new Date("May 26, 2016 " + end_string); 


// now we need to check if your end time is beyond midnight, if so, we need to add one day to end_time 
var stay_length = end_time.getTime() - start_time.getTime(); 
if (stay_length < 0 { 
    // end time is beyond midnight, re-calculate end_time with adding one to the day 
    end_time = new Date("May 27, 2016 " + end_string); 
    stay_length = end_time.getTime() - start_time.getTime(); 
} elseif (stay_length > 24 { 
    // The user probably reversed the times, so show an alert 
    alert("The start time must be before the end time") 
} else { 
    // The user most likely put in correct times 
} 
+0

私は最初の答えを試してみて、それは私のために働いた。しかし、あなたの答えは本当に面白そうです。助けてくれてありがと – DevMan

関連する問題