Рандомизируйте время, добавляя или вычитая его из текущего времени в php - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь заполнить таблицу БД в Laravel. Есть столбец time, который должен быть уникальным или, по крайней мере, не одинаковым для каждой записи в этой таблице.

В настоящее время я использую это; который дает результат в некоторой степени, который я ищу, но он не завершен.

mt_rand(0,23).":".str_pad(mt_rand(0,59), 2, "0", STR_PAD_LEFT)

Моя проблема в том, что у одиночного времени di git нет 0 впереди, а sec отсутствует , Обычно я планировал следующий код, но он снова и снова демонстрирует одни и те же результаты:

date('H:i:s', strtotime( ((srand(0,1) ? '-'.mt_rand(1,24) : '+'.mt_rand(1,24).' '.rand(0,1) ? 'minute' : 'hour')), strtotime(date('H:i:s')))),

Результат - "05:30:00" всегда, поэтому я не понимаю, что делать дальше.

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Хотя ответ @ leek, вероятно, лучше, учитывая, что вы используете Laravel, более общий c способ получить то, что вам нужно, заключается в следующем:

$dt = new DateTime();
var_dump($dt->format('H:i:s'));

Однако это не будет достаточно уникален, если вы запускаете скрипт чаще, чем раз в секунду. И, конечно, он (потенциально) не будет уникальным, если вы запустите его более чем на 1 день.

1 голос
/ 10 февраля 2020

Вы сказали, что используете Laravel, так почему бы просто не использовать встроенную библиотеку Faker для DateTime генерации ?

$faker = Faker::create();
$faker->time('H:i')

Из документации здесь доступно Выходные данные, связанные с DateTime:

unixTime($max = 'now')                // 58781813
dateTime($max = 'now', $timezone = null) // DateTime('2008-04-25 08:37:17', 'UTC')
dateTimeAD($max = 'now', $timezone = null) // DateTime('1800-04-29 20:38:49', 'Europe/Paris')
iso8601($max = 'now')                 // '1978-12-09T10:10:29+0000'
date($format = 'Y-m-d', $max = 'now') // '1979-06-09'
time($format = 'H:i:s', $max = 'now') // '20:49:42'
dateTimeBetween($startDate = '-30 years', $endDate = 'now', $timezone = null) // DateTime('2003-03-15 02:00:49', 'Africa/Lagos')
dateTimeInInterval($startDate = '-30 years', $interval = '+ 5 days', $timezone = null) // DateTime('2003-03-15 02:00:49', 'Antartica/Vostok')
dateTimeThisCentury($max = 'now', $timezone = null)     // DateTime('1915-05-30 19:28:21', 'UTC')
dateTimeThisDecade($max = 'now', $timezone = null)      // DateTime('2007-05-29 22:30:48', 'Europe/Paris')
dateTimeThisYear($max = 'now', $timezone = null)        // DateTime('2011-02-27 20:52:14', 'Africa/Lagos')
dateTimeThisMonth($max = 'now', $timezone = null)       // DateTime('2011-10-23 13:46:23', 'Antarctica/Vostok')
amPm($max = 'now')                    // 'pm'
dayOfMonth($max = 'now')              // '04'
dayOfWeek($max = 'now')               // 'Friday'
month($max = 'now')                   // '06'
monthName($max = 'now')               // 'January'
year($max = 'now')                    // '1993'
century                               // 'VI'
timezone                              // 'Europe/Paris'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...