Как я могу получить одно случайное DateTime из DatePeriod? - PullRequest
0 голосов
/ 04 августа 2020

Я создаю один 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 объектов. Я хочу использовать одно из этих значений случайным образом.

1 Ответ

1 голос
/ 04 августа 2020

На вопрос был дан ответ с комментарием, и поэтому он всегда находится при поиске неотвеченных вопросов.

Вариант 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...