2017-05-02 4 views
0

私は週に1つのプログラムを作成しようとしています。私は項目を表示するコードを持っていますが、長い間、私は項目を変更する前にコードを待つだけです。一度に1つのアイテムを配列の中に1週間表示し、その後一週間待たずに次のアイテムに進むことができますか?1週間に1つのアイテムをアレイに表示する方法

+0

アイテムを表示した時間と、配列インデックスを 'localStorage'に保存します。その後、彼らが戻ってきたら、ローカルストレージから時間を取得し、それを現在の時間と比較し、1週間以上経過していれば、インデックスを増分して次回の時間を表示します。 – Barmar

+0

私は私がフォローしているか分からない。遅延(現在の1000ms、または1秒)を1週間に変更したいのですが、実際には1週間待たないでしょうか?それは矛盾しているようです。デバッグの目的のために、それを1秒またはその付近の何かに保ちたいと思うでしょう。 – Extragorey

+0

@Extragorey彼は、彼が週を待つのに 'setInterval()'を使いたくないと思うと思います。おそらく、ユーザーがページを開いたままにしないので、うまくいきません。 – Barmar

答えて

1

インデックスとして現在の時刻を使用できます。インデックスは、ユーザーがサイトに入った任意の時刻ではなく、1970からカウントされます。書き込みのよう

は、現在のタイムスタンプが1493684749486.

var d = new Date(); 
// +d === 1493684749486 

は、配列のインデックスに現在のタイムスタンプを変換することです、あなたは週にミリ秒数を知っておく必要があります(1000年* 60 * 60 * 24 * 7)、その後、ここでの回答のために1970年

var index = Math.floor(+d/(1000*60*60*24*7)); 
// 2469 weeks have passed since 1970 
// output `mind[index]` now. 

経過したどのように多くの週を把握、私はあなたが午前9時で金曜日の項目を変更したいと仮定するつもりです。次の最も近い9時の金曜日は1494000000000です。

d.setMilliseconds(0); 
d.setSeconds(0); 
d.setMinutes(0); 
d.setHours(9); 
d.setDate(d.getDate() + (7 + 5 - d.getDay()) % 7); // How many days away is Friday from Monday? Add that to the current date. 

これは315250514ミリ秒です。あなたは次の変更を開始するためにこの時間をsetTimeoutにします。

アイテムが変更されると、次の変更に対して新しいタイムアウトが発生します。これは、setIntervalよりも優先されます。

function displayNextItem() { 
    var d = new Date(); 
    var timestamp = +d; 
    var index = Math.floor(timestamp/(1000*60*60*24*7)); 
    wfmind.innerHTML = mind[index % mind.length]; 

    d.setMilliseconds(0); 
    d.setSeconds(0); 
    d.setMinutes(0); 
    d.setHours(9); 
    d.setDate(d.getDate() + (7 + 5 - d.getDay()) % 7); // How many days away is Friday from Monday? Add that to the current date. 

    setTimeout(displayNextItem, +d - timestamp); 
} 
displayNextItem(); 
+0

ありがとうございました!私たちはそれを持っているかもしれないと思う!私は来週にそれを確認してお知らせします。 –

関連する問題