0

ランダムな日付を (最も古いものから最も新しいものまで) リストするにはどうすればよいですか?

PHPでこれを達成しようとしましたが、成功しませんでした。ランダムな日付を表示することはできますが、新しい日付を作成して指定された順序でリストするのではなく、同じ日付を何度もループし続けます。

これまでの私のコードは次のとおりです。

// Create a random date between 2 months
$datestart = strtotime('01-11-2012');
$dateend = strtotime('01-12-2012');
$daystep = 86400;
$datebetween = abs(($dateend - $datestart) / $daystep);
$randomday = rand(0, $datebetween);

for($i=0; $i< rand(10, 30) ;++$i)
{
echo "<div>" . date("d/m/Y", $datestart + ($randomday * $daystep)) ."</div>";
}

更新: Mihai Iorgaのおかげでコードを機能させることができましたが、日付を古いものから新しいものへと並べ替えるという問題がまだ残っています。どうすればこれを達成できますか:

// Create a random date between 2 months
$datestart = strtotime('01-11-2012');
$dateend = strtotime('01-12-2012');
$daystep = 86400;
$datebetween = abs(($dateend - $datestart) / $daystep);
$randomday = rand(0, $datebetween);

for($i=0; $i< rand(10, 30) ;++$i)
{
$randomday = rand(0, $datebetween);
echo "<div>" . date("d/m/Y", $datestart + ($randomday * $daystep)) ."</div>";
}
4

2 に答える 2

1
$datestart = strtotime('01-11-2012');
$dateend = strtotime('01-12-2012');
$daystep = 86400;
$datebetween = abs(($dateend - $datestart) / $daystep);
$dateArray[] = date("d/m/Y");
$randomday = rand(0, $datebetween);

for($i=0; $i< rand(10, 30) ;++$i)
{
     $randomday = rand(0, $datebetween);
     $randomdate = date("d/m/Y", $datestart + ($randomday * $daystep));
     $dateArray[] = $randomdate;
}

sort($dateArray);

foreach ($dateArray as $d) 
{ 
   echo "<div>" . $d ."</div>";
} 

http://writecodeonline.com/php/でコードをテストし、この出力を実行すると、次のようになります。

05/11/2012
06/11/2012
07/11/2012
08/11/2012
08/11/2012
12/11/2012
12/11/2012
12/11/2012
19/11/2012
20/11/2012
24/11/2012
27/11/2012
28/11/2012
30/11/2012
于 2012-11-06T14:08:30.300 に答える
0

あなたが試すことができます

$dateStart = new DateTime();
$dateStart->setDate(2012, 11, 01);

$dateEnd = new DateTime();
$dateEnd->setDate(2012, 12, 01);

$dates = array();
while ( $dateStart < $dateEnd ) {
    $dates[] = $dateStart->format("d/m/Y");
    $dateStart->modify(sprintf("+%d day",mt_rand(1, 10)));
}

var_dump($dates);

出力

array
  0 => string '01/11/2012' (length=10)
  1 => string '07/11/2012' (length=10)
  2 => string '14/11/2012' (length=10)
  3 => string '20/11/2012' (length=10)
  4 => string '27/11/2012' (length=10)
  5 => string '28/11/2012' (length=10)
于 2012-11-06T14:04:32.977 に答える