如何使用PHP在两个日期之间生成随机日期?

M.E*_*M.E 54 php datetime timestamp date

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

我怎么能用PHP实现这一点我先搜索过但只找到了Java而不是php的答案

例如 :

$string = randomdate(1262055681,1262055681);
Run Code Online (Sandbox Code Playgroud)

zom*_*bat 88

PHP有rand()函数:

$int= rand(1262055681,1262055681);
Run Code Online (Sandbox Code Playgroud)

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

$int= mt_rand(1262055681,1262055681);
Run Code Online (Sandbox Code Playgroud)

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

$string = date("Y-m-d H:i:s",$int);
Run Code Online (Sandbox Code Playgroud)

  • 要添加它,一旦您的随机数出现,将其视为新的时间戳并从中构建日期. (4认同)
  • 例如:date('Ym-d',$ int); (2认同)

Som*_*luk 40

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

一个快速的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('Y-m-d H:i:s', $val);
}
Run Code Online (Sandbox Code Playgroud)

此函数使用zombat建议的strtotime()将日期时间描述转换为Unix时间戳,并使用date()从已生成的随机时间戳中生成有效日期.


Bre*_*ley 26

您可以使用随机数来确定随机日期.获取0到日期之间的天数之间的随机数.然后将该数字添加到第一个日期.

例如,要获取日期,从现在到30天之间的随机数天.

echo date('Y-m-d', strtotime( '+'.mt_rand(0,30).' days'));
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 24

使用PHP的另一个解决方 DateTime

$start并且$endDateTime对象,我们转换为时间戳.然后我们使用mt_rand方法在它们之间获得随机时间戳.最后,我们重新创建一个DateTime对象.

function randomDateInRange(DateTime $start, DateTime $end) {
    $randomTimestamp = mt_rand($start->getTimestamp(), $end->getTimestamp());
    $randomDate = new DateTime();
    $randomDate->setTimestamp($randomTimestamp);
    return $randomDate;
}
Run Code Online (Sandbox Code Playgroud)

  • 我们都应该移到`DateTime`而不是`date()`函数。话虽如此,这是最好的解决方案。 (2认同)

ari*_*ayu 8

这是另一个例子:

$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("Y-m-d", $datestart + ($randomday * $daystep)) . "\n";
Run Code Online (Sandbox Code Playgroud)


小智 6

最好的方法 :

$timestamp = rand( strtotime("Jan 01 2015"), strtotime("Nov 01 2016") );
$random_Date = date("d.m.Y", $timestamp );
Run Code Online (Sandbox Code Playgroud)


Séb*_*uel 6

我们可以使用 date_format 的另一个解决方案:

 /**
 * Method to generate random date between two dates
 * @param $sStartDate
 * @param $sEndDate
 * @param string $sFormat
 * @return bool|string
 */

function randomDate($sStartDate, $sEndDate, $sFormat = 'Y-m-d H:i:s') {
    // Convert the supplied date to timestamp
    $fMin = strtotime($sStartDate);
    $fMax = strtotime($sEndDate);
    // Generate a random number from the start and end dates
    $fVal = mt_rand($fMin, $fMax);
    // Convert back to the specified date format
    return date($sFormat, $fVal);
}
Run Code Online (Sandbox Code Playgroud)

来源: https: //gist.github.com/samcrosoft/6550473

您可以使用例如:

$date_random = randomDate('2018-07-09 00:00:00','2018-08-27 00:00:00');
Run Code Online (Sandbox Code Playgroud)


vij*_*mar 5

通过在两个日期之间使用carbon和php rand

$startDate = Carbon::now();
$endDate   = Carbon::now()->subDays(7);

$randomDate = Carbon::createFromTimestamp(rand($endDate->timestamp, $startDate->timestamp))->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

要么

$randomDate = Carbon::now()->subDays(rand(0, 7))->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)