【问题标题】:PHP generate a random number using todays datePHP使用今天的日期生成一个随机数
【发布时间】:2012-05-25 08:07:18
【问题描述】:

我正在尝试为内容块(在网页上)分配一个随机生成的数字,该数字基于今天的日期(无论是什么日期)和一个固定数字。由于某种原因,输出的数字种类存在巨大差异。例如,当我在本地测试我的代码时,生成的数字对我来说已经足够好(正面),但在实际的实时服务器上,它们通常相反并且是负数。

这是我的一个班轮:

<?php $today=date('YmdHi'); echo rand(201203140906, $today); ?>

基本上“201203140906”是年、月、日、小时。

这是好事还是坏事?有没有更好的方法来做到这一点?

【问题讨论】:

  • 你能使用时间戳吗?并且不要使用rand(),而是使用mt_rand()。您还可以运行mt_getrandmax() 来查看mt_rand() 中的最大值。我还想问你为什么要这样做?在日期和固定数字(我可以理解的日期)之间找到值似乎很奇怪。
  • 您是否尝试在随机数生成器中植入日期,以便内容每天随机化?
  • 我对 PHP 不是很好,你看到了,所以上面的一半没有多大意义 :( 我只是想确保一个内容块在页面上随机排序在其他块中按日期顺序排列。这就是原因。

标签: php date random time


【解决方案1】:

在 32 位系统上,INT 中可以保存的最大值是 2147483647。

http://php.net/manual/en/language.types.integer.php

如果您的本地计算机是 64 位,而您的服务器是 32 位,则它们将有不同的大小限制。服务器将无法处理像 201203140906 这样大的整数。

您可以随机生成一个较小的数字,然后将其添加到 201203140906。

可能是这样的:

$today = date('YmdHi');
$startDate = date('YmdHi', strtotime('2012-03-14 09:06:00'));
$range = $today - $startDate;
$rand = rand(0, $range);
echo "$rand and " . ($startDate + $rand);

或者您可以这样做以生成最近十天的随机日期:

$today = date('YmdHi');
$startDate = date('YmdHi', strtotime('-10 days'));
$range = $today - $startDate;
$rand = rand(0, $range);
echo "$rand and " . ($startDate + $rand);

【讨论】:

  • 我该怎么做呢?我对 PHP 不是很好,希望能帮我解决这个问题...
  • 我很乐意提供帮助。如果此答案是正确的,请记住通过单击复选标记将其标记为已接受。
  • 我对这种方法的唯一问题是,随着时间的推移,内容块将显示在页面下方,因为我的固定日期/数字与实际日期之间的差异会增加。它不是一个理想的解决方案。谢谢。
  • 那么您不想要“基于今天日期和固定数字之间的随机生成的数字”?这就是您在问题中所要求的。
  • 我已添加代码以获取过去十天的随机日期。假设您的内容从最新到最旧排序,这应该使您插入的内容保持在顶部附近。显然,您可以将“10”更改为合适的天数。
【解决方案2】:
<?php 
$then = strtotime('2012-03-14 09:06:00'); 
$now = time();
for($i=0; $i<100; $i++) echo date('YmdHi', rand($then, $now)), '<br>'; 
?>

顺便说一句...你也可以使用“uniqid()”

【讨论】:

  • 太好了,谢谢。但一个问题是它只输出不同数字的完整列表,例如'201205140021
    201203151132
    ...等'我该如何修改它使其只输出一个随机数?
【解决方案3】:

鉴于您在 cmets 中的解释,您可能可以使用 shuffle() 函数解决您的问题。您可以有两个数组,一个是日期列表,另一个是您希望随机传播的数据,然后简单地从打乱后的数据中读取。由于没有代码示例,我将把细节留给你。

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 2014-09-25
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多