代码之家  ›  专栏  ›  技术社区  ›  Divesh choudhary

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

  •  1
  • Divesh choudhary  · 技术社区  · 8 年前

    我有一个给定的持续时间,例如 00:10:15 。我想生成一个比这更短的随机时间,例如: 00:09:18 或 00:02:15 。如何使用PHP实现这一点?

    3 回复  |  直到 8 年前
        1
  •  1
  •   Yuri    8 年前

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

    $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

        2
  •  0
  •   hanshenrik    8 年前

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

    使用strotime()将“00:10:15”解析为unix时间戳,使用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\u int()而不是rand()。(PHP7+)
        3
  •  -4
  •   hellowd    8 年前

    这很容易处理 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}";

    推荐文章