Comment générer une date aléatoire entre deux dates en utilisant php?

JE CODE une application où je dois assigner une date aléatoire entre deux horodateurs fixes

comment je peux réaliser ceci en utilisant php j'ai cherché en premier mais j'ai seulement trouvé la réponse pour Java Pas php

par exemple :

$string = randomdate(1262055681,1262055681);
46
demandé sur Rishabh 2009-12-29 06:02:46

11 réponses

PHP a le rand () fonction:

$int= rand(1262055681,1262055681);

Il a aussi mt_rand (), qui est généralement censé avoir une meilleure aléatoire dans les résultats:

$int= mt_rand(1262055681,1262055681);

pour transformer un timestamp en chaîne, vous pouvez utiliser date (), c'est à dire:

$string = date("Y-m-d H:i:s",$int);
83
répondu zombat 2009-12-29 03:10:19

si les dates données sont dans le format date time, alors utilisez cette façon la plus facile de le faire est de convertir les deux nombres en horodateurs, puis définissez ces derniers comme les limites minimum et maximum sur un générateur de nombres aléatoires.

un exemple PHP rapide serait:

// 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);
}

cette fonction utilise strtotime () comme suggéré par zombat pour convertir une description datetime en horodatage Unix, et date () pour faire une date valide à partir de l'horodatage aléatoire qui a été générer.

35
répondu Somnath Muluk 2012-04-11 10:10:50

Vous pouvez simplement utiliser un nombre aléatoire pour déterminer une date aléatoire. Obtenir un nombre aléatoire entre 0 et le nombre de jours entre les dates. Ajoutez ce numéro à la première date.

par exemple, pour obtenir une date un nombre aléatoire jours entre maintenant et 30 jours.

echo date('Y-m-d', strtotime( '+'.mt_rand(0,30).' days'));
25
répondu Brent Baisley 2009-12-29 03:11:16

une autre solution utilisant PHP DateTime

$start et $endDateTime objets et nous nous convertissons en horodatage. Ensuite, nous utilisons mt_rand méthode pour obtenir un Timestamp aléatoire entre eux. Enfin nous recréons un DateTime objet.

function randomDateInRange(DateTime $start, DateTime $end) {
    $randomTimestamp = mt_rand($start->getTimestamp(), $end->getTimestamp());
    $randomDate = new DateTime();
    $randomDate->setTimestamp($randomTimestamp);
    return $randomDate;
}
9
répondu Sam 2018-03-22 08:58:37

Voici un autre exemple:

$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";
8
répondu ariefbayu 2009-12-29 03:15:27

La meilleure façon :

$timestamp = rand( strtotime("Jan 01 2015"), strtotime("Nov 01 2016") );
$random_Date = date("d.m.Y", $timestamp );
4
répondu Максим С 2016-11-20 11:32:40

En utilisant gaz et php rand entre deux dates

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

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

OU

$randomDate = Carbon::now()->subDays(rand(0, 7))->format('Y-m-d');
3
répondu vijaykumar 2017-12-04 06:52:41

le montant de strtotime ici, c'est trop élevé.

Pour tous ceux dont les intérêts s'étendent avant 1971 et après 2038, voici une solution moderne et flexible:

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>';
}

appelez ça n'importe comment ...

// 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);

telle quelle, la fonction nécessite date1<=date2.

2
répondu neokio 2017-03-16 19:08:37

la plus simple de toutes, cette petite fonction fonctionne pour moi Je l'ai écrit dans une classe helper datetime comme méthode statique

/**
 * 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);

}
0
répondu Kuldeep Dangi 2016-05-12 10:34:18

question assez bonne; nécessaire pour générer des données d'échantillon aléatoire pour une application.

vous pourriez utiliser le fonction suivante avec des arguments optionnels pour générer des dates aléatoires:

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

exemple d'entrée:

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

les besoins des lecteurs peuvent varier d'une application à l'autre, en général espoir cette fonction est un outil pratique où vous avez besoin de générer des dates aléatoires/ échantillon de données pour votre application.

s'il vous Plaît remarque que la fonction initialement en mode debug, donc le changer $mood="" autre que debug en production .

La fonction accepte:

  1. date de début
  2. date de fin
  3. format: tout format php accepté pour la date ou l'heure
  4. fuseau horaire: le nom ou le numéro d'offset
  5. mode: debug, époque, verbose époque ou à un commentaire

sortie debug le mode est un nombre aléatoire selon les spécifications facultatives.

testé avec PHP 7.x

-1
répondu wpcoder 2017-10-16 16:24:31
$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);

date et heure au hasard

-3
répondu alpc 2016-06-29 14:40:28