如何使用PHP在两个date之间生成随机数据?

我正在编写一个应用程序,我需要在两个固定的时间戳之间分配随机数据

我怎么能实现这个使用PHP我已经search了第一次,但只find了答案为Java而不是PHP

例如 :

$string = randomdate(1262055681,1262055681); 

PHP有rand()函数:

 $int= rand(1262055681,1262055681); 

它也有mt_rand() ,通常声称在结果中具有更好的随机性:

 $int= mt_rand(1262055681,1262055681); 

要将时间戳转换为string,可以使用date() ,即:

 $string = date("Ymd H:i:s",$int); 

如果给定的date是date时间格式,那么使用这个最简单的方法是将这两个数字转换为时间戳,然后将它们设置为随机数生成器上的最小和最大边界。

一个快速的PHP例子是:

 // Find a randomDate between $start_date and $end_date function randomDate($start_date, $end_date) { // Convert to timetamps $min = strtotime($start_date); $max = strtotime($end_date); // Generate random number using above bounds $val = rand($min, $max); // Convert back to desired date format return date('Ymd H:i:s', $val); } 

此函数使用zombatbuild议的strtotime()将date时间描述转换为Unix时间戳,使用date()从生成的随机时间戳中提取有效date。

您可以使用随机数来确定随机date。 获取介于0和date之间的天数之间的随机数。 然后只需将该号码添加到第一个date。

例如,要从现在到30天之间获得一个随机数字的date。

 echo date('Ym-d', strtotime( '+'.mt_rand(0,30).' days')); 

这是另一个例子:

 $datestart = strtotime('2009-12-10');//you can change it to your timestamp; $dateend = strtotime('2009-12-31');//you can change it to your timestamp; $daystep = 86400; $datebetween = abs(($dateend - $datestart) / $daystep); $randomday = rand(0, $datebetween); echo "\$randomday: $randomday\n"; echo date("Ymd", $datestart + ($randomday * $daystep)) . "\n"; 

另一种使用PHP DateTime的解决scheme

$start_date$end_date是DateTime对象

 private static function random_date_in_range($start_date, $end_date) { $new_date_timestamp = mt_rand($start_date->getTimestamp(), $end_date->getTimestamp()); $random_date = new DateTime(); $random_date->setTimestamp($new_date_timestamp); return $random_date; } 

在两个date之间使用carbon和php rand

 $startDate = Carbon::now(); $endDate = Carbon::now()->subDays(7); $randomDate = Carbon::createFromTimestamp(rand($endDate->timestamp, $startDate->timestamp))->format('Ym-d'); 

在这里的时间量是太高了。
对于1971年之前和2038年以后的利益的任何人来说,这里是一个现代的,灵活的解决scheme:

 function random_date_in_range( $date1, $date2 ){ if (!is_a($date1, 'DateTime')) { $date1 = new DateTime( (ctype_digit((string)$date1) ? '@' : '') . $date1); $date2 = new DateTime( (ctype_digit((string)$date2) ? '@' : '') . $date2); } $random_u = random_int($date1->format('U'), $date2->format('U')); $random_date = new DateTime(); $random_date->setTimestamp($random_u); return $random_date->format('Ym-d') .'<br>'; } 

可以用任何方法来调用它

 // timestamps echo random_date_in_range(157766400,1489686923); // any date string echo random_date_in_range('1492-01-01','2050-01-01'); // English textual parsing echo random_date_in_range('last Sunday','now'); // DateTime object $date1 = new DateTime('1000 years ago'); $date2 = new DateTime('now + 10 months'); echo random_date_in_range($date1, $date2); 

如此,该函数需要date1 <= date2

最好的办法 :

 $timestamp = rand( strtotime("Jan 01 2015"), strtotime("Nov 01 2016") ); $random_Date = date("dmY", $timestamp ); 

很好的问题; 需要为应用生成一些随机样本数据。

您可以使用以下函数与可选参数来生成随机date:

 function randomDate($startDate, $endDate, $format = "YMd H:i:s", $timezone = "gmt", $mode = "debug") { return $result; } 

样本input:

 echo 'UTC: ' . randomDate("1942-01-19", "2016-06-03", "YMd H:i:s", "utc") . '<br>'; //1942-Jan-19 07:00:00 echo 'GMT: ' . randomDate("1942-01-19", "2016-06-03", "Y/M/d H:i A", "gmt") . '<br>'; //1942/Jan/19 00:00 AM echo 'France: ' . randomDate("1942-01-19", "2016-06-03", "YF", "Europe/Paris") . '<br>'; //1942 January echo 'UTC - 4 offset time only: ' . randomDate("1942-01-19", "2016-06-03", "H:i:s", -4) . '<br>'; //20:00:00 echo 'GMT +2 offset: ' . randomDate("1942-01-19", "2016-06-03", "YMd H:i:s", 2) . '<br>'; //1942-Jan-19 02:00:00 echo 'No Options: ' . randomDate("1942-01-19", "2016-06-03") . '<br>'; //1942-Jan-19 00:00:00 

读者的要求可能因应用程序不同而不同,一般希望这个函数是一个方便的工具,你需要为你的应用程序生成一些随机的date/样本数据。

请注意 ,该function最初处于debugging模式,因此将其更改为$mood=""而不是在生产中进行debugging。

该function接受:

  1. 开始date
  2. 结束date
  3. 格式:任何PHP接受的date或时间格式
  4. 时区:名称或偏移号码
  5. 模式:debugging,时代,详细时代或详细

非debugging模式下的输出是根据可选规格的随机数。

使用PHP 7.x进行testing

最简单的是,这个小函数适用于我,我把它作为一个静态方法写在帮助类datetime

 /** * Return date between two dates * * @param String $startDate * @param String $endDate * @return String * * @author Kuldeep Dangi <kuldeepamy@gmail.com> */ public static function getRandomDateTime($startDate, $endDate) { $randomTime = mt_rand(strtotime($startDate), strtotime($endDate)); return date(self::DATETIME_FORMAT_MYSQL, $randomTime); } 
 $yeni_tarih = date('Ym-d', strtotime( '+'.mt_rand(-90,0).' days'))." ".date('H', strtotime( '+'.mt_rand(0,24).' hours')).":".rand(1,59).":".rand(1,59); 

完全随机的date和时间