2012-11-06 53 views
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>"; 
} 

更新:我現在設法得到的代碼工作得益於米哈伊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>"; 
} 
+0

包括'$ randomday = rand(0,$ datebetween);'in'for'會讓你開始。你可以創建一個數組並使用'array_unique'來唯一。 –

+2

已經在所以,給這個閱讀:http://stackoverflow.com/questions/1972712/generate-random-date-between-two-dates-using-php – RelicScoth

+0

我已經更新了問題的傢伙,仍然有問題整理從最舊到最新日期 – methuselah

回答

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 
+0

嗨,我'我已經測試過你的代碼,但它沒有正確排序日期 – methuselah

+0

嘗試更新的代碼,看看它是否工作。 – chridam

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) 
+0

我看你是如何拋出陣列,但我怎麼才能得到它顯示日期內的唯一日期 – methuselah

+0

所有你需要的是http://pastebin.com/9PaAdLKA – Baba