如何在PHP中生成一个比给定时间短的随机时间?

时间:2018-03-30 09:44:10

标签: php time

我有一段给定的时间,例如00:10:15。我想生成一个比这短的随机时间,例如:00:09:1800:02:15。如何用PHP做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以将其转换为秒,然后添加随机值,然后转换回时间格式。

$time = '00:10:15';
list($h, $m, $s) = explode(":", $time);
$seconds = $s + ($m * 60) + ($h * 3600);

$seconds -= rand(0, $seconds); //set desired min and max values

// now back to time format
$hours = floor($seconds / 3600);
$mins = floor($seconds / 60 % 60);
$secs = floor($seconds % 60);

$timeFormat = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);

Run test code

答案 1 :(得分:0)

(仍然添加我的解决方案,因为我不喜欢任何现有的答案)

使用strtotime()解析你的" 00:10:15"使用rand()获取该时间戳内的一些随机时间,使用date()将unix时间戳转换回你的" 00:10:15"格式。

<?php
$minimum_time=strtotime("00:00:00");
$maximum_time=strtotime("00:10:15");
$rand=rand($minimum_time,$maximum_time);
$str=date("H:i:s",$rand);
echo $str;
  • 如果您需要加密安全随机性,请使用random_int()而不是rand()。 (PHP7 +)

答案 2 :(得分:-4)

很容易与explodemt_rand打交道,例如:
     list($hour, $minute, $second) = explode(':', '00:10:15'); $newHour = str_pad(mt_rand(0, $hour), 2, 0, STR_PAD_LEFT); $newMinute = str_pad(mt_rand(0, $minute), 2, 0, STR_PAD_LEFT); $newSecond = $newMinute == $minute ? mt_rand(0, $second) : mt_rand(0, 59); $newSecond = str_pad($newSecond, 2, 0, STR_PAD_LEFT); echo $newTime = "{$newHour}:{$newMinute}:{$newSecond}";