如何使用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接受:
- 开始date
- 结束date
- 格式:任何PHP接受的date或时间格式
- 时区:名称或偏移号码
- 模式: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和时间