这是我的代码:
$curr_year = date('Y');
$dob_year = rand($curr_year-18,$curr_year-47);
$dob_month = rand(01,12);
$dob_day = rand(01,30);
echo $dob = $dob_month.'/'.$dob_day.'/'.$dob_year;
我的结果为1/2/1988
,但我的要求是01/02/1988
答案 0 :(得分:6)
怎么样:
$min = strtotime("47 years ago")
$max = strtotime("18 years ago");
$rand_time = mt_rand($min, $max);
$birth_date = date('%m/%d/%Y', $rand_time);
基本上:生成一些表示允许日期范围的unix时间戳,然后将这些时间戳用作随机数生成器的最小/最大范围。您将获得一个恰好可用作unix时间戳的int,然后您可以将其输入date()
和格式,但是您可以使用。
这有额外的好处/副作用,允许您获得随机出生时间,而不仅仅是约会。
答案 1 :(得分:4)
在这种特殊情况下,您可以使用sprintf
:
echo sprintf("%02s/%02s/%04s",$dob_month,$dob_day,$dob_year);
但是,我建议将日期作为日期处理:
$min = strtotime("jan 1st -47 years");
$max = strtotime("dec 31st -18 years");
$time = rand($min,$max);
echo $dob = date("d/M/Y",$time);
答案 2 :(得分:2)
使用str_pad
。
echo $dob = str_pad($dob_month, 2, '0', STR_PAD_LEFT) . '/' . str_pad($dob_day, 2, '0', STR_PAD_LEFT) . '/'.$dob_year;
答案 3 :(得分:1)
您可以sprintf
,str_pad
或date
与strtotime
一起使用,以获得您想要的效果。
另外需要注意的是你的代码中你正在发表声明
rand(01,12);
并且前导0将被解释为八进制数。在这种情况下,这不是一个问题,因为01 == 1但是如果你想在最后一个季度获得一个月,那么09是一个无效的八进制数字,php会将其解释为0.请参阅http://php.net/manual/en/language.types.integer.php处的警告细节
答案 4 :(得分:0)
使用str_pad
- > Manual
$dob = str_pad($dob_month, 2, '0', STR_PAD_LEFT).'/'. str_pad($dob_day, 2, '0', STR_PAD_LEFT).'/'.$dob_year;
echo $dob;
答案 5 :(得分:0)
我有同样的需要,随机约会。所以这是我的解决方案。生成绝对有效的日期。
// Random birthdate between age
function get_random_birthdate_by_age($min_age, $max_age)
{
$age = rand($min_age, $max_age);
$birth_year = date("Y") - $age; // Current year - age
return date("d.m.Y", strtotime("01.01.{$birth_year} +" . rand(0, 365) . " days"));
}
// Random birthdate between age 0 - 110
function get_random_birthdate()
{
return get_random_birthdate_by_age(0, 110);
}