1

約40個の正の数のリストを提供してから、ホームページに最初の数を表示させたいと思います。その後、深夜に、番号はリスト内の次の番号に変更されます。リストの最後に来ると、ローテーションが最初からやり直します。たとえば、ユーザーが今日何度か私のページにアクセスして、リストの最初の番号を確認します。次に、午前1時と言うと、ページに戻ってリストの次の番号が表示され、明日の深夜まで表示されます...などなどこれは可能ですか?

リストに従って番号を変更するいくつかの異なるJavaScriptを試しましたが、ユーザーがページにアクセスすると、リストが最初からやり直されます。

私はこれにとても慣れていないので、コードのどの部分が必要になるかわかりません。なぜなら、私が試していることは、本来の目的を果たしているからです...私が望んでいる方法ではありません。

意味がありますか?

残念ながら、このWebページにphpを使用することはできません。

4

2 に答える 2

1

開始日 (できれば過去の日付) を定義し、今日の日付を計算して 2 つを引き、モジュロを使用して表示する数値の範囲に絞り込みます。

var minDate = 15681, // days since 1-1-1970
nowDate = Math.ceil(new Date().getTime() / 1000 / 86400),
numbers = [1, 5, 1234, 6543, 1236456];

// get the number for today
console.log(numbers[(nowDate - minDate) % numbers.length]);

開始日が重要でない場合は、式を次のように簡略化できます。

 numbers[Math.ceil(new Date().getTime() / 86400000) % numbers.length];

ところで、これ.getTime()は GMT 時間を与えるので、誰にとっても真夜中に変わることはありません。

于 2012-12-06T14:53:30.737 に答える
1

new Date().getTime()現在の時刻をミリ秒単位で取得するために使用できます。これを日数に換算して切り捨てると、エポックからの日数がわかります。そのモジュロを取り、それを使用して数値の配列のインデックスを取得します。(ユーザーによると) 常に現在の時刻を使用しているため、Cookie やサーバー側のカウンターを保存する必要はありません。

var nums = [1,1,2,3,5,8,13]; // and so on
    d = new Date(), // today
    days = d.getTime() / (1000*60*60*24), 
    idx = Math.floor(days) % nums.length;
alert(nums[idx]); // should change once a day
于 2012-12-06T14:54:49.863 に答える