programing

PHP를 사용하여 두 날짜 사이에 임의의 날짜를 생성하는 방법은 무엇입니까?

yoursource 2021. 1. 16. 10:49
반응형

PHP를 사용하여 두 날짜 사이에 임의의 날짜를 생성하는 방법은 무엇입니까?


두 개의 고정 타임 스탬프 사이에 임의의 날짜를 할당해야하는 애플리케이션을 코딩하고 있습니다.

PHP를 사용하여 이것을 달성하는 방법은 먼저 검색했지만 PHP가 아닌 Java에 대한 답변 만 찾았습니다.

예 :

$string = randomdate(1262055681,1262055681);

PHP를 사용하는 또 다른 솔루션 DateTime

$start하고 $end있는 DateTime객체와 우리는 타임 스탬프로 변환합니다. 그런 다음 mt_rand메소드를 사용 하여 그들 사이에 임의의 타임 스탬프를 얻습니다. 마지막으로 DateTime객체를 다시 만듭니다 .

function randomDateInRange(DateTime $start, DateTime $end) {
    $randomTimestamp = mt_rand($start->getTimestamp(), $end->getTimestamp());
    $randomDate = new DateTime();
    $randomDate->setTimestamp($randomTimestamp);
    return $randomDate;
}

PHP에는 rand () 함수가 있습니다.

$int= rand(1262055681,1262055681);

또한 일반적으로 결과에서 더 나은 임의성을 갖는 것으로 알려진 mt_rand () 가 있습니다.

$int= mt_rand(1262055681,1262055681);

타임 스탬프를 문자열로 바꾸려면 date ()를 사용할 수 있습니다 .

$string = date("Y-m-d H:i:s",$int);

주어진 날짜가 날짜 시간 형식 인 경우이 작업을 수행하는 가장 쉬운 방법은 두 숫자를 타임 스탬프로 변환 한 다음 난수 생성기에서 최소 및 최대 경계로 설정하는 것입니다.

빠른 PHP 예제는 다음과 같습니다.

// Find a randomDate between $start_date and $end_date
function randomDate($start_date, $end_date)
{
    // Convert to timetamps
    $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('Y-m-d H:i:s', $val);
}

이 함수는 zombat에서 제안한 strtotime ()사용 하여 datetime 설명을 Unix 타임 스탬프로 변환하고 date ()를 사용하여 생성 된 임의의 타임 스탬프에서 유효한 날짜를 만듭니다.


임의의 숫자를 사용하여 임의의 날짜를 결정할 수 있습니다. 0과 날짜 사이의 일 수 사이의 임의의 숫자를 가져옵니다. 그런 다음 해당 번호를 첫 번째 날짜에 추가하십시오.

예를 들어, 날짜를 가져 오려면 지금부터 30 일 사이의 날짜를 임의의 숫자로 지정합니다.

echo date('Y-m-d', strtotime( '+'.mt_rand(0,30).' days'));

다음은 또 다른 예입니다.

$datestart = strtotime('2009-12-10');//you can change it to your timestamp;
$dateend = strtotime('2009-12-31');//you can change it to your timestamp;

$daystep = 86400;

$datebetween = abs(($dateend - $datestart) / $daystep);

$randomday = rand(0, $datebetween);

echo "\$randomday: $randomday\n";

echo date("Y-m-d", $datestart + ($randomday * $daystep)) . "\n";

가장 좋은 방법 :

$timestamp = rand( strtotime("Jan 01 2015"), strtotime("Nov 01 2016") );
$random_Date = date("d.m.Y", $timestamp );

두 날짜 사이에 탄소 와 PHP 랜드 를 사용하여

$startDate = Carbon::now();
$endDate   = Carbon::now()->subDays(7);

$randomDate = Carbon::createFromTimestamp(rand($endDate->timestamp, $startDate->timestamp))->format('Y-m-d');

또는

$randomDate = Carbon::now()->subDays(rand(0, 7))->format('Y-m-d');

strtotime여기 의 금액이 너무 높습니다.
1971 년 이전과 2038 년 이후에 관심이있는 모든 사람을위한 현대적이고 유연한 솔루션이 있습니다.

function random_date_in_range( $date1, $date2 ){
    if (!is_a($date1, 'DateTime')) {
        $date1 = new DateTime( (ctype_digit((string)$date1) ? '@' : '') . $date1);
        $date2 = new DateTime( (ctype_digit((string)$date2) ? '@' : '') . $date2);
    }
    $random_u = random_int($date1->format('U'), $date2->format('U'));
    $random_date = new DateTime();
    $random_date->setTimestamp($random_u);
    return $random_date->format('Y-m-d') .'<br>';
}

여러 가지 방법으로 호출하십시오 ...

// timestamps
echo random_date_in_range(157766400,1489686923);

// any date string
echo random_date_in_range('1492-01-01','2050-01-01');

// English textual parsing
echo random_date_in_range('last Sunday','now');

// DateTime object
$date1 = new DateTime('1000 years ago');
$date2 = new DateTime('now + 10 months');
echo random_date_in_range($date1, $date2);

이 함수에는 date1<=이 필요합니다 date2.


date_format을 사용할 수있는 다른 솔루션 :

 /**
 * Method to generate random date between two dates
 * @param $sStartDate
 * @param $sEndDate
 * @param string $sFormat
 * @return bool|string
 */

function randomDate($sStartDate, $sEndDate, $sFormat = 'Y-m-d H:i:s') {
    // Convert the supplied date to timestamp
    $fMin = strtotime($sStartDate);
    $fMax = strtotime($sEndDate);
    // Generate a random number from the start and end dates
    $fVal = mt_rand($fMin, $fMax);
    // Convert back to the specified date format
    return date($sFormat, $fVal);
}

출처 : https://gist.github.com/samcrosoft/6550473

예를 들어 사용할 수 있습니다.

$date_random = randomDate('2018-07-09 00:00:00','2018-08-27 00:00:00');

나는 전에 같은 상황이 있었고 위의 답변 중 어느 것도 내 문제를 해결하지 못하기 때문에

새로운 기능과 함께

function randomDate($startDate, $endDate, $count = 1 ,$dateFormat = 'Y-m-d H:i:s')
{
   //inspired by
    // https://gist.github.com/samcrosoft/6550473

    // Convert the supplied date to timestamp
    $minDateString = strtotime($startDate);
    $maxDateString = strtotime($endDate);

    if ($minDateString > $maxDateString) 
    {
        throw new Exception("From Date must be lesser than to date", 1);

    }

    for ($ctrlVarb = 1; $ctrlVarb <= $count; $ctrlVarb++) 
    { 
       $randomDate[] = mt_rand($minDateString, $maxDateString); 
    }
    if (sizeof($randomDate) == 1) 
    {
        $randomDate = date($dateFormat, $randomDate[0]);
        return $randomDate;
    }elseif (sizeof($randomDate) > 1) 
    {
        foreach ($randomDate as $randomDateKey => $randomDateValue) 
        {
           $randomDatearray[] =  date($dateFormat, $randomDateValue);
        }
        //return $randomDatearray;
        return array_values(array_unique($randomDatearray));
    }
}

이제 테스트 부분 (데이터는 테스트 중 변경 될 수 있습니다)

$fromDate = '2012-04-02';
$toDate = '2018-07-02';

print_r (randomDate ($ fromDate, $ toDate, 1));

결과는

2016-01-25 11:43:22

print_r (randomDate ($ fromDate, $ toDate, 1));

array:10 [▼
  0 => "2015-08-24 18:38:26"
  1 => "2018-01-13 21:12:59"
  2 => "2018-06-22 00:18:40"
  3 => "2016-09-14 02:38:04"
  4 => "2016-03-29 17:51:30"
  5 => "2018-03-30 07:28:48"
  6 => "2018-06-13 17:57:47"
  7 => "2017-09-24 16:00:40"
  8 => "2016-12-29 17:32:33"
  9 => "2013-09-05 02:56:14"
]

그러나 몇 번의 테스트 후 입력이 다음과 같으면 어떨지 생각했습니다.

$fromDate ='2018-07-02 09:20:39';
$toDate = '2018-07-02 10:20:39';

따라서 다음과 같은 많은 수의 날짜를 생성하는 동안 중복이 발생할 수 있습니다. 10,000

so i have added array_unique and this will return only the non duplicates


Simplest of all, this small function works for me I wrote it in a helper class datetime as a static method

/**
 * Return date between two dates
 *
 * @param String $startDate
 * @param String $endDate
 * @return String
 *
 * @author Kuldeep Dangi <kuldeepamy@gmail.com>
 */
public static function getRandomDateTime($startDate, $endDate)
{
    $randomTime = mt_rand(strtotime($startDate), strtotime($endDate));
    return date(self::DATETIME_FORMAT_MYSQL, $randomTime);

}

Pretty good question; needed to generate some random sample data for an app.

You could use the following function with optional arguments to generate random dates:

function randomDate($startDate, $endDate, $format = "Y-M-d H:i:s", $timezone = "gmt", $mode = "debug")
{
    return $result;
}

sample input:

echo 'UTC: ' . randomDate("1942-01-19", "2016-06-03", "Y-M-d H:i:s", "utc") . '<br>';
//1942-Jan-19 07:00:00

echo 'GMT: ' . randomDate("1942-01-19", "2016-06-03", "Y/M/d H:i A", "gmt") . '<br>'; 
//1942/Jan/19 00:00 AM

echo 'France: ' . randomDate("1942-01-19", "2016-06-03", "Y F", "Europe/Paris") . '<br>';
//1942 January

echo 'UTC - 4 offset time only: ' . randomDate("1942-01-19", "2016-06-03", "H:i:s", -4) . '<br>';
//20:00:00

echo 'GMT +2 offset: ' . randomDate("1942-01-19", "2016-06-03", "Y-M-d H:i:s", 2) . '<br>';
//1942-Jan-19 02:00:00

echo 'No Options: ' . randomDate("1942-01-19", "2016-06-03") . '<br>';
//1942-Jan-19 00:00:00

readers requirements could vary from app to another, in general hope this function is a handy tool where you need to generate some random dates/ sample data for your application.

Please note that the function initially in debug mode, so change it to $mood="" other than debug in production .

The function accepts:

  1. start date
  2. end date
  3. format: any php accepted format for date or time
  4. timezone: name or offset number
  5. mode: debug, epoch, verbose epoch or verbose

the output in not debug mode is random number according to optional specifications.

tested with PHP 7.x


$yeni_tarih = date('Y-m-d', strtotime( '+'.mt_rand(-90,0).' days'))." ".date('H', strtotime( '+'.mt_rand(0,24).' hours')).":".rand(1,59).":".rand(1,59);

Full random date and time

ReferenceURL : https://stackoverflow.com/questions/1972712/how-to-generate-random-date-between-two-dates-using-php

반응형