如何设置自动“当天报价”?

时间:2010-10-05 15:28:43

标签: javascript html xml

我负责一个网站,我已经设置了一个“当天的报价”,目前相当简单。 See Here(在页面右侧)

它目前所做的是获取月份和月份的日期,并将其标准化为1,然后乘以引号数(存储在xml文件中)并向下舍入。虽然这个方法会给我相同的报价,无论我使用哪台机器(随机数生成器永远不会做的事情),我已经向我指出这种方法是有缺陷的。如果你考虑1月份的前几个报价将是相同的,1 * 1 / 360,2 * 1 / 360,3 * 1/360,因此报价不是唯一的。

有人能想出选择当天报价的更好方法吗?

6 个答案:

答案 0 :(得分:1)

确实,决定论是“随机数发生器永远无法做到的”。幸运的是(至少在这种情况下),编程语言提供 - 随机数生成器,而不是真实的生成器。通过对“种子”值进行一系列计算来生成伪随机数。

要获得可重复的“随机”选择,那么,您需要做的就是以每天一致的方式设置种子 - 我建议使用“yyyymmdd”格式的日期作为种子,但任何其他在一天内不变的数字也会同样有效。

获得种子后,告诉PRNG将其与命令srand(mySeed);一起使用,每次rand()都会得到相同的“随机”数字序列(直到mySeed变化)。

答案 1 :(得分:1)

如果您想按顺序显示报价,您可以获得当前的Julian Day编号,该编号每天将增加一个,并在将其除以引用数量作为今天报价的数量后进行提醒。如果你想显示所有引号,但是它们的顺序要改变每个周期,你可以使用从分部商得到的逻辑来修改引号并重新排列位。

答案 2 :(得分:1)

有趣的问题。而不是依赖于一个月中的日子,为什么不计算给定日期以来的天数? JS为此提供了一个非常好的属性:getTime(),它为您提供自1970年1月1日UTC时间上午12点以来的毫秒数,您可以通过一些简单的除法将其转换为天数。

唯一令它变得复杂的是,如果你希望你的报价在午夜转移(谁没有?),你必须考虑时区。同样,JS提供了getTimezoneOffset(),它将用户区域设置前后的分钟数与UTC进行比较。如果您希望所有用户同时翻转,无论他们住在哪里,只需将其设置为静态值即可。

您的代码可能如下所示:

var intQuoteCount = 51; // The number of quotes in your library
var dtNow = new Date();
var intTZOffset = dtNow.getTimezoneOffset() * 60000; // automatically adjust for user timezone
var intNow = dtNow.getTime() - intTZOffset;
var intDay = Math.floor(intNow / 86400000); // The number of 'local' days since Jan 1, 1970
var intQuoteToDisplay = intDay % intQuoteCount;

答案 3 :(得分:0)

你可以尝试在偶数天进行整理,然后在奇怪的一天进行四舍五入。但我确信有更好的方法,这只是一个快速的建议。

此外,您可以尝试在计算中使用当年的当前日期,因为这对于一年中的每个新日都是唯一的,而不是每个月重复一次。

答案 4 :(得分:0)

你是否必须限制自己的360天周期?如果您有500个引号。有些可能永远不会被使用 如何 - 每天选择1和#OfQoutes之间的随机数,将其用作日期索引的引用,并将其标记为“在当前周期中使用”。
下次当你选择一个号码时,如果你选择一个标记为“在当前周期中使用”的报价,则重新选择,直到你得到一个没有标记的报价。标记所有引号后,取消标记所有引号 这将确保您在每个周期中检查所有引号以及随机性,并且它显然适用于任意数量的引号。

答案 5 :(得分:0)



<body onLoad="thoughts_authors()">
<script>
function thoughts_authors()
{

var authors=new Array()
authors[0] = "Charles Schulz";
authors[1] = "Jack Wagner";
authors[2] = "Mark Twain";
authors[3] = "Oscar Wilde";
authors[4] = "David Letterman";
authors[5] = "Lily Tomlin";

var thoughts=new Array()
thoughts[0] = "Good Day Is Today";
thoughts[1] = "Style Is What You Choose";
thoughts[2] = "Be The Best Version Of You.";
thoughts[3] = "Truth Along Triumphs.";
thoughts[4] = "How can Life Be Devastating When YOU Are Present in It.";
thoughts[5] = "Believe In What You Say";

index = Math.floor(Math.random() * thoughts.length);

alert(thoughts[index]+ "-" + authors[index]);

}
</script>
&#13;
&#13;
&#13;

这将与随机作者一起产生随机语录