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);
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);
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.
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'));
une autre solution utilisant PHP DateTime
$start
et $end
DateTime
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;
}
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";
La meilleure façon :
$timestamp = rand( strtotime("Jan 01 2015"), strtotime("Nov 01 2016") );
$random_Date = date("d.m.Y", $timestamp );
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');
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
.
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);
}
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:
- date de début
- date de fin
- format: tout format php accepté pour la date ou l'heure
- fuseau horaire: le nom ou le numéro d'offset
- 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
$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