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)
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并且$end是DateTime对象,我们转换为时间戳.然后我们使用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)
这是另一个例子:
$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)
我们可以使用 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)
$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)