【发布时间】:2015-01-20 17:23:22
【问题描述】:
我正在尝试创建一个 for 循环,在其中指定开始日期和结束日期,并且我想提取随机混合的日期,其中每个日期总是晚于前一个日期并早于下一个日期。
我不需要预定义的一组日期,我可能有 10 个 - 我可能有 100 个或 1000 个,只要它们存在于开始日期和结束日期内。
例子:
2015-01-15 08:06:00
2015-01-15 15:23:42
2015-01-16 06:03:00
.........
.........
2015-01-20 08:18:32
这就是我所拥有的(这是错误的):
$start = strtotime('2015-01-10 08:00:00');
$end = strtotime('2015-01-20 10:57:59');
for ($i=$start;$i<$end;$i++) {
//Current time + Anywhere between 1 hour and 3 days
$x = $i + (int)rand(3600,259200);
echo "<p>" . date('Y-m-d H:i:s', $x) . "</p>";
}
在我的测试中,我没有得到任何结果...我相信循环正在无限运行...或者其他问题。
谁能帮忙?
【问题讨论】:
-
你的逻辑似乎有缺陷。如果您将随机时间量添加到当前日期序列,使您超过结束日期但仍少于您要生成的日期数,会发生什么情况?您似乎需要做的是查看开始日期和结束日期之间的时间以及迭代次数以确定日期之间的平均日期间隔,然后引入抖动以随机化 +- 一些时间到该平均值。然后,您需要查看到最后的剩余时间并在每次迭代时重新计算。
-
您的变量
$end等于 1421769479 :),这是一个巨大的数字 -
@smarber 但
$start也是一个庞大的数字,比$end少了大约一百万 -
循环数约为865k。这是大量的迭代,需要一些时间才能完成(我猜是十几秒)并产生大约 24 MiB 的输出。这不是因为它没有结束运行,而是浏览器没有针对处理和渲染这么大的文档进行优化。