1

我想提供一个大约 40 个正数的列表,然后让我的主页显示第一个数字。然后在午夜,该号码将更改为列表中的下一个号码。在列表末尾时,轮换重新开始。例如,一个用户今天多次访问我的页面并看到列表中的第一个数字。然后说凌晨 1:00,他们回到页面并查看列表中的下一个数字,并且会一直这样做到明天晚上的午夜……等等等等这可能吗?

我已经尝试了几种不同的 javascript,它们确实会根据我的列表更改数字,但是当用户转到页面时,它会重新启动列表。

我对此很陌生,我不知道你可能需要我的代码的哪一部分,因为我一直在尝试做它应该做的事情......只是不是我想要的。

我说得有道理吗?

不幸的是,我将无法在此网页上使用 php。

4

2 回答 2

1

定义一个开始日期(最好是过去),计算今天的日期,将两者相减,然后使用模数将其压缩到您要显示的数字范围内:

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 回答