【问题标题】:Get X number of random dates in a order time range?在订单时间范围内获取 X 个随机日期?
【发布时间】:2018-02-01 08:53:04
【问题描述】:

我正在尝试创建一个函数,该函数输出 X 个日期,其中日期按时间顺序排列(因此 date1

到目前为止我已经想出了这个功能,但是在uasort之后数组键不按顺序有关系吗???

   function getRandomDateTime($startDate, $endDate, $num) {
    $dateTmp = '';
    $dateArr = [];
    $rndDat = '';

    for ($i = 0; $i < $num; $i++) {
        $randomTime = mt_rand(strtotime($startDate), strtotime($endDate));
        $rndDate = date('Y-m-d', $randomTime);
        $dateArr[] .= $rndDate;


    }
    return $dateArr;

}
$test = getRandomDateTime('2015-06-03', '2017-05-12', 10);
print_r($test);

function sortByTime($a, $b){
  $a = strtotime($a);
  $b = strtotime($b);
  return $a - $b;
}
uasort($test, 'sortByTime');

print_r($test);

【问题讨论】:

  • $dateArr[] .= $rndDate; ~ 如果没有.,那不应该是$dateArr[] = $rndDate;吗?
  • 只需使用usort()uasort() 维护索引关联。

标签: php date


【解决方案1】:

除非我遗漏了什么,否则你能不简单地在函数中使用sort 来返回一个排序数组吗?

function getRandomDateTime( $start, $end, $num ) {
    $arr=array();
    for( $i = 0; $i < $num; $i++ ) {
        $arr[]=date('Y-m-d', mt_rand( strtotime( $start ), strtotime( $end ) ) );
    }
    sort( $arr, SORT_REGULAR );
    return $arr;
}

$test = getRandomDateTime('2013-06-03', '2018-02-01', 10 );
printf('<pre>%s</pre>', print_r( $test,true ) );

将产生类似于以下内容的输出:

Array
(
    [0] => 2013-07-30
    [1] => 2014-06-25
    [2] => 2014-09-15
    [3] => 2014-11-19
    [4] => 2015-03-24
    [5] => 2015-05-30
    [6] => 2015-08-15
    [7] => 2016-02-12
    [8] => 2017-02-10
    [9] => 2018-01-19
)

【讨论】:

  • 嗨,我从来没有使用 sort_regular 的简单排序,之前我没有想到。但是我应该使用 sortdate 吗?
猜你喜欢
  • 1970-01-01
  • 2012-12-21
  • 2014-11-06
  • 2012-08-08
  • 2018-09-21
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多