<?php
$data1 = mktime(0,0,0,1,1,1950);
$data2 = mktime(0,0,0,1,1,2000);
$rand_time = rand($data1,$data2);
echo date("Y-m-d H:i:s",$rand_time);
?>

解决方案 »

  1.   

    <?php
    //1950<1970 在windows中不能直接mktime()
    //但1950到2000 与1974到2024中每一天存在一一对应的关系
    //所以可先求出1974-2024中的随机一天,再把年份减24即可$start=mktime(0,0,0,1,1,1974);
    $end=mktime(23,59,59,1,1,2024);
    $rand=rand($start,$end);
    $year=date("Y",$rand)-24;//1974-24=1950
    echo $year.date("-m-d H:i:s",$rand)."\n";//1952-07-15 20:39:18
    ?>
      

  2.   


    要看你php的版本了,php5可以直接用mktime().
      

  3.   


    1楼和2楼写出来了,楼主的题目是哪里来的,哈哈!思路就是:生成Unix随机的时间截,因为是时间截,所以绝对是有效日期(处理器问题排除),然后就是格式化了.
      

  4.   

    因为每4年1个闰年
    1950年有365天,1974年有365天
    1951年有365天,1975年有365天
    1952年有366天,1976年有366天
    1953年有365天,1977年有365天
    ...
    1976年366天,2000年有366天 (还好是2000年,如果1900就只有365天了就不能这么弄了)
    ...
    1999年365天 2023年365天
    2000年366天,2024年有366天故后者年份减24即是前者,(如果只算年月日时分秒的话)
    比如 1976 有x月y日,则 1950年也有x月y日
    我一开始也是用mktime(0,0,0,1,1,1950)但报错说windows不允许负的时间戳
    <b>Warning</b>:  mktime(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970
    又改成mktime(0,0,0,1,1,1970)也不行,
    估计是时区为东8区的关系 要改成mktime(8,0,0,1,1,1970)以后的时间才让用我这个24年倒是没取好,如果取28年的话连星期几都是一样的