我想提供一个大约 40 个正数的列表,然后让我的主页显示第一个数字。 然后在午夜,号码将更改为列表中的下一个号码。 当位于列表末尾时,轮换将重新开始。 例如,一个用户今天多次访问我的页面,并看到列表中的第一个数字。 然后说凌晨 1:00,他们回到页面并看到列表中的下一个数字,并将这样做直到明天晚上午夜......等等等等,这可能吗?
我已经尝试了几种不同的 javascript,它们确实会根据我的列表更改数字,但是当用户转到该页面时,它会重新开始列表。
我对此很陌生,我不知道您可能需要我的代码的哪一部分,因为我一直在尝试的是它应该做的事情......只是不是我想要它做的那样。
我说得通吗?
不幸的是,我将无法在此网页上使用php。
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
定义一个开始日期(最好是过去),计算今天的日期,减去两者,然后用模将其压缩到要显示的数字范围内:
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()
给了格林威治标准时间。