首页 > 解决方案 > 如何从 DatePeriod 中获取一个随机的 DateTime?

问题描述

我正在DatePeriod使用以下代码创建一个:

$beginDate=new DateTime();
$beginDate->setTime(0,30);
$mPeriod = new DatePeriod(
    $beginDate, 
    DateInterval::createFromDateString('+1 minutes'), 
    90
);

我可以将每个对象打印到此期间,例如:

foreach ($mPeriod as $period) {
    echo $period->format('Y-m-d H:i') . PHP_EOL;
}

但我不知道如何才能只将其中一个DateTime物体带入这个时期。我想随机使用这些值之一。

标签: phpdatetime

解决方案


该问题已通过评论回答,因此在搜索未回答的问题时始终可以找到。

凯文评论中的变体 2 作为代码:

$beginDate=new DateTime();
$beginDate->setTime(0,30);
$mPeriod = new DatePeriod(
    $beginDate, 
    DateInterval::createFromDateString('+1 minutes'), 
    90
);

$rndKey = random_int(0,90);
foreach($mPeriod as $key => $period){
  if($key == $rndKey) {
    echo $period->format('Y-m-d H:i');
  }
}

但是,如果只需要 00:30 和 02:00 之间的随机时间,那么没有 DateInterval 会更快更容易:

$rndTime = date_create('today 0:30')
  ->modify(random_int(0,90).' Minutes')
;
echo $rndTime->format('Y-m-d H:i');

推荐阅读