2017-11-20 9 views
1

送信ボタンを1日に何回か非表示にしたい。1日に複数回送信ボタンを非表示にする

以下のコードは時々動作しますが、時々動作しません。昨日のコードは機能しましたが、今日のコードは機能しません。私は問題がどこにあるのか理解できません。

<script> 
window.addEventListener("load", function() { 
    // Check time and update the button's state every second. 
    setInterval(updateSubmitButtonState, 1000); 
}, false); 

function updateSubmitButtonState() { 
var timezone = "Asia/Calcutta"; 
    var currentTime = new Date(); 
    var hours = currentTime.getHours(); 
    var minutes = currentTime.getMinutes(); 
    var t =currentTime.getHours() + ":" + currentTime.getMinutes(); 

if (t >= '10:00' && t <= '10:20' || 
    t >= '11:00' && t <= '11:20' || 
    t >= '13:00' && t <= '13:20' || 
    t >= '15:15' && t <= '15:25' || 
    t >= '17:30' && t <= '17:40' || 
    t >= '19:00' && t <= '19:10' || 
    t >= '20:30' && t <= '20:40') { 
    $("#submit").css("display", "none"); 
    } else { 
    $("#submit").css("display", "block"); 
    } 
} 
</script> 
<input type="submit" id="submit" name="submit"> 
+1

't> = '10:00 '.....'は文字列比較のようですが、時間を比較する必要があります。時間の比較については、このリンクをご確認ください https://stackoverflow.com/questions/6212305/how-can-i-compare-two-time-strings-in-the-format-h​​hmmss – brk

+1

あなたは 'number'と'string'。 – gurvinder372

答えて

2

文字列で確認していますが、時間をミリ秒に変更することをお勧めします。

これを試してください。

<script> 
window.addEventListener("load", function() { 
    // Check time and update the button's state every second. 
    setInterval(updateSubmitButtonState, 1000); 
}, false); 
function convertMilliSec(hr, min){ 
    return (parseInt(hr) * (60000 * 60)) + (parseInt(min) * 60000) 
} 
function updateSubmitButtonState() { 
var timezone = "Asia/Calcutta"; 
    var currentTime = new Date(); 
    var hours = currentTime.getHours(); 
    var minutes = currentTime.getMinutes(); 
    var t = convertMilliSec(currentTime.getHours(), currentTime.getMinutes()); 
    console.log(t); 

if (t >= convertMilliSec(10,00) && t <= convertMilliSec(10,20) || 
    t >= convertMilliSec(11,00) && t <= convertMilliSec(11,20) || 
    t >= convertMilliSec(14,00) && t <= convertMilliSec(14,34) || 
    t >= convertMilliSec(13,00) && t <= convertMilliSec(13,20) || 
    t >= convertMilliSec(15,00) && t <= convertMilliSec(15,20) || 
    t >= convertMilliSec(17,00) && t <= convertMilliSec(17,20) || 
    t >= convertMilliSec(19,00) && t <= convertMilliSec(19,20) || 
    t >= convertMilliSec(20,00) && t <= convertMilliSec(20,20)) { 
    $("#submit").css("display", "none"); 
    } else { 
    $("#submit").css("display", "block"); 
    } 
} 
</script> 
2

あなたは文字列に変換しているので、それはあり、それは辞書的に注文しようとします。例:17:07は"17:7"のように変換されますので、"17:30"より大きくなります。私はこの機能を使用することをお勧めします。

function timeToMinutes(h, m) { 
    return h * 60 + m; 
} 

あなたは二つにhoursminutesを変換するために、いずれかの必要がある

function timeToMinutes(h, m) { 
 
    return h * 60 + m; 
 
} 
 

 
var currentTime = new Date(); 
 
var mins = timeToMinutes(currentTime.getHours(), currentTime.getMinutes()); 
 
alert(mins >= timeToMinutes(19, 20) && mins <= timeToMinutes(19, 30));

+0

あなたの説明をありがとう。 Plzはあなたのコードを実装する方法を助ける? –

+0

@dipakdutta私は私の答えを編集しました。今すぐチェックしてください。 –

+0

JSFiddleの同じスニペット:https://jsfiddle.net/rq0v6n83/ –

1

このサンプルコードを試してみてください

timeToMinutes(h, m) > timeToMinutes(10, 0) ... 

のように、あなたは比較することができます次のような数字(ゼロリード):

var hours = currentTime.getHours(); 
hours = hours > 9 ? hours : '0'+hours.toString(); 

var minutes = currentTime.getMinutes(); 
minutes= minutes > 9 ? minutes: '0'+minutes.toString(); 

var t = hours + ":" + minutes; 

それとも、Dateオブジェクトにそれらのすべてを変換する必要があります。比較するとき、あなたはまた、Dateオブジェクトと比較

var t = currentTime.getHours() + ":" + currentTime.getMinutes(); 
var dObj = new Date('01/01/2017 '+t+':00'); 

if(dObj >= new Date('01/01/2017 10:00:00') && t <= new Date('01/01/2017 10:20:00') ..... 

アップデート:
ここです2番目のメソッドのJSFiddle:
https://jsfiddle.net/02z5hbo1/2/

+0

ここに新しい日付('01/01/2017 10:00:00 ')ではなく、01/01/01自動的に現れる日付の書き方 –

+0

私はコードを実装することができません。あなたが親切にjsfiddleを通して見せてくれるならば –

+0

私はjsFiddleのURLを分で与えるでしょう – Dabbas

関連する問題