我有一段给定的时间,例如00:10:15
。我想生成一个比这短的随机时间,例如:00:09:18
或00:02:15
。如何用PHP做到这一点?
答案 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);
答案 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;
答案 2 :(得分:-4)
很容易与explode
和mt_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}";