2015-10-06 11 views
5

私はデータベースを持っており、そこにテキスト、Webページに表示される期間と時間を保存します。jsonが受け取った文字列要素を表示する日時に基づいて表示するにはどうすればよいですか?

次のようにPHPの結果は次のとおりです。

{"text_content":"dgsgdsgds","text_duration":"15","start_time":"2015-09-28 23:11:15"},{"text_content":"dgsgdsgds","text_duration":"15","start_time":"2015-09-28 23:11:30"},{"text_content":"gdsgdsgds","text_duration":"15","start_time":"2015-10-01 14:00:00"} 

私は、データベースからデータを取得し、画面上に印刷しjqueryのスクリプトを持っている:

var results =[]; 
var cursor = 0; 

function myFunction() { 
    $.getJSON('list2.php', function(json) { 
     results = json; 
     cursor = 0; 

     // Now start printing 
     printNext(); 
    }); 
} 

function printNext(){ 
    if(cursor == results.length){ 
     // Reset the cursor back to the beginning. 
     cursor = 0; 
    } 

    // Print the key1 in the div. 
    //$('#mydiv').html(results[cursor].key1); 
    $('#mydiv').hide('fast', function(){ $('#mydiv').html(results[cursor].text_content); $('#mydiv').show('fast'); }); 

    // Set a delay for the current item to stay 
    // Delay is key2 * 1000 seconds 
    setTimeout(function(){ 
     printNext(); 
    }, results[cursor].text_duration * 1000); 

    // Advance the cursor. 
    cursor++; 
} 

を、今、私が欲しかったですstart_timeのように、データベースからフェッチされた日付にのみテキストが画面に表示される機能を追加することはできますが、サーバーコードへのアクセスを一切持たずにjqueryのみで実行できるかどうかわかりません。 次のようなif文を追加しようとしました:

if(results[cursor].start_time == new Date()){ 

これは画面に印刷する直前ですが、トリックはしませんでした。あなたはそれを手伝ってもらえますか? ありがとう!

+0

より良いDBからの時間に基づいて、必要なデータのみを取り出します。 @ randomuser1 –

+0

私はそれについて考えましたが、1時間ごとにデータを取得し、その時間の分に応じてデータを表示する繰り返しクエリを実行したいと考えています。 – randomuser1

答えて

5

JSON.parseを使用してJSON文字列を解析します。

var myObj = JSON.parse(results[0]); 

をと比較し、あなたのstart_time

if (new Date(myObj.start_time) == new Date()) 

あなたが特定の時間使用setTimeoutであなたの関数を実行する場合:

var diff = new Date(myObj.start_time).getTime() - new Date().getTime(); 
setTimeout(function() { 
    $('#mydiv').hide('fast', function() { 
     $('#mydiv').html(results[cursor].text_content); 
     $('#mydiv').show('fast'); 
    }); 
}, diff) 

かあなたは毎1000あなたの機能を実行することができますsetIntervalを使用してclearIntervalでそれを停止することにより、MS:

function check() { 
    if (new Date(myObj.start_time) == new Date()) { 
     $('#mydiv').hide('fast', function() { 
      $('#mydiv').html(results[cursor].text_content); 
      $('#mydiv').show('fast'); 
     }); 
     clearInterval(myInterval); 
    } 
} 

var myInterval = setInterval(check, 1000) 
+0

もう一度@kakajanに感謝します。この行の前にこの条件をチェックしても、$( '#mydiv').html(結果は[cursor] .text_content); $( '#mydiv' '#mydiv')。show( 'fast');}); 'それは一度だけチェックされ、1秒間でも日付が違うなら、私は決して画面上にテキストを表示しません。 1秒に1回ループしたり、表示するテキストがあるかどうかを確認するなど、何となくそれを防ぐ手段がありますか? – randomuser1

+0

ありがとう、私は本当にあなたの答えをありがとう、これは私が必要なものです!私はちょうど1つの質問があります - あなたはなぜ、新しいDate(myObj.start_time)を2番目のパラメータとしてsetTimeoutメソッド(setIntervalと同じ)に入れるのか簡単に説明できますか?代わりにいくつかの数値があってはなりませんか? – randomuser1

+0

setTimeout()メソッドは、指定されたミリ秒後に関数を呼び出したり、式を評価したりします。だから、私はそこにエラーがある、私は答えを更新し、我々は現在の日付との差を計算する必要があります。ここでは[setTimeOut](http://www.w3schools.com/jsref/met_win_settimeout.asp)の説明です – kakajan

関連する問題