gpt4 book ai didi

PHP:如何创建 randomDate($startDate, $endDate) 函数?

转载 作者:可可西里 更新时间:2023-10-31 23:44:12 25 4
gpt4 key购买 nike

我制作了一个函数,它可以很好地处理 32 位日期(strtotime 可以接受),但它不可扩展。我需要随机生成人们的出生日期,所以我必须使用 DateTime(而且只有 <=5.2.13,让它变得更加困难)函数来生成它们。

这是我得到的:

public static function randomDate($start_date, $end_date, $format = DateTimeHelper::DATE_FORMAT_SQL_DATE)
{
if($start_date instanceof DateTime) $start_date = $start_date->format(DateTimeHelper::DATE_FORMAT_YMDHMS);
if($end_date instanceof DateTime) $end_date = $end_date->format(DateTimeHelper::DATE_FORMAT_YMDHMS);

// Convert timetamps to millis
$min = strtotime($start_date);
$max = strtotime($end_date);

// Generate random number using above bounds
$val = rand($min, $max);

// Convert back to desired date format
return date($format, $val);
}

那么现在,我如何在两个 DateTime 之间生成一个随机日期?

谢谢!

最佳答案

编辑:根据评论修复错误。

假设您有开始日期和结束日期的详细信息,比如说 getdate() 返回的内容,那么您可以生成一个日期而无需耗时戳:

$year = rand($start_details['year'], $end_details['year']);

$isleap = $year % 400 == 0 || ($year % 100 != 0 && $year % 4);
$min_yday = $year > $start_details['year'] ? 0 : $start_details['yday'];
$max_yday = $year == $end_details['year'] ? $end_details['yday'] : ($isleap ? 365 : 364);

$yday = rand($min_yday, $max_yday);

$sec_in_day = 24 * 60 * 60;

$date_details = getdate($yday * $sec_in_day + ($isleap ? 2 * 365 * $sec_in_day : 0));
return sprintf('%04d-%02d-%02d', $year, $date_details['mon'], $date_details['mday']);

类似的东西(我没有测试)。上面的代码假定为 UTC,您可能希望根据您的时区进行偏移。5

关于PHP:如何创建 randomDate($startDate, $endDate) 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3284138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com