Файл: gapps/vendor/fzaninotto/faker/src/Faker/Provider/DateTime.php
Строк: 411
<?php
namespace FakerProvider;
class DateTime extends Base
{
protected static $century = array('I','II','III','IV','V','VI','VII','VIII','IX','X','XI','XII','XIII','XIV','XV','XVI','XVII','XVIII','XIX','XX','XXI');
protected static function getMaxTimestamp($max = 'now')
{
if (is_numeric($max)) {
return (int) $max;
}
if ($max instanceof DateTime) {
return $max->getTimestamp();
}
return strtotime(empty($max) ? 'now' : $max);
}
/**
* Get a timestamp between January 1, 1970 and now
*
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @return int
*
* @example 1061306726
*/
public static function unixTime($max = 'now')
{
return mt_rand(0, static::getMaxTimestamp($max));
}
/**
* Get a datetime object for a date between January 1, 1970 and now
*
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @param string $timezone time zone in which the date time should be set, default to result of `date_default_timezone_get`
* @example DateTime('2005-08-16 20:39:21')
* @return DateTime
* @see http://php.net/manual/en/timezones.php
* @see http://php.net/manual/en/function.date-default-timezone-get.php
*/
public static function dateTime($max = 'now', $timezone = null)
{
return static::setTimezone(
new DateTime('@' . static::unixTime($max)),
(null === $timezone ? date_default_timezone_get() : $timezone)
);
}
/**
* Get a datetime object for a date between January 1, 001 and now
*
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @param string $timezone time zone in which the date time should be set, default to result of `date_default_timezone_get`
* @example DateTime('1265-03-22 21:15:52')
* @return DateTime
* @see http://php.net/manual/en/timezones.php
* @see http://php.net/manual/en/function.date-default-timezone-get.php
*/
public static function dateTimeAD($max = 'now', $timezone = null)
{
return static::setTimezone(
new DateTime('@' . mt_rand(-62135597361, static::getMaxTimestamp($max))),
(null === $timezone ? date_default_timezone_get() : $timezone)
);
}
/**
* get a date string formatted with ISO8601
*
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @return string
* @example '2003-10-21T16:05:52+0000'
*/
public static function iso8601($max = 'now')
{
return static::date(DateTime::ISO8601, $max);
}
/**
* Get a date string between January 1, 1970 and now
*
* @param string $format
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @return string
* @example '2008-11-27'
*/
public static function date($format = 'Y-m-d', $max = 'now')
{
return static::dateTime($max)->format($format);
}
/**
* Get a time string (24h format by default)
*
* @param string $format
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @return string
* @example '15:02:34'
*/
public static function time($format = 'H:i:s', $max = 'now')
{
return static::dateTime($max)->format($format);
}
/**
* Get a DateTime object based on a random date between two given dates.
* Accepts date strings that can be recognized by strtotime().
*
* @param DateTime|string $startDate Defaults to 30 years ago
* @param DateTime|string $endDate Defaults to "now"
* @param string $timezone time zone in which the date time should be set, default to result of `date_default_timezone_get`
* @example DateTime('1999-02-02 11:42:52')
* @return DateTime
* @see http://php.net/manual/en/timezones.php
* @see http://php.net/manual/en/function.date-default-timezone-get.php
*/
public static function dateTimeBetween($startDate = '-30 years', $endDate = 'now', $timezone = null)
{
$startTimestamp = $startDate instanceof DateTime ? $startDate->getTimestamp() : strtotime($startDate);
$endTimestamp = static::getMaxTimestamp($endDate);
if ($startTimestamp > $endTimestamp) {
throw new InvalidArgumentException('Start date must be anterior to end date.');
}
$timestamp = mt_rand($startTimestamp, $endTimestamp);
return static::setTimezone(
new DateTime('@' . $timestamp),
(null === $timezone ? date_default_timezone_get() : $timezone)
);
}
/**
* Get a DateTime object based on a random date between one given date and
* an interval
* Accepts date string that can be recognized by strtotime().
*
* @param string $date Defaults to 30 years ago
* @param string $interval Defaults to 5 days after
* @param string $timezone time zone in which the date time should be set, default to result of `date_default_timezone_get`
* @example dateTimeInInterval('1999-02-02 11:42:52', '+ 5 days')
* @return DateTime
* @see http://php.net/manual/en/timezones.php
* @see http://php.net/manual/en/function.date-default-timezone-get.php
*/
public static function dateTimeInInterval($date = '-30 years', $interval = '+5 days', $timezone = null)
{
$intervalObject = DateInterval::createFromDateString($interval);
$datetime = $date instanceof DateTime ? $date : new DateTime($date);
$otherDatetime = clone $datetime;
$otherDatetime->add($intervalObject);
$begin = $datetime > $otherDatetime ? $otherDatetime : $datetime;
$end = $datetime===$begin ? $otherDatetime : $datetime;
return static::dateTimeBetween(
$begin,
$end,
(null === $timezone ? date_default_timezone_get() : $timezone)
);
}
/**
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @example DateTime('1964-04-04 11:02:02')
* @return DateTime
*/
public static function dateTimeThisCentury($max = 'now')
{
return static::dateTimeBetween('-100 year', $max);
}
/**
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @example DateTime('2010-03-10 05:18:58')
* @return DateTime
*/
public static function dateTimeThisDecade($max = 'now')
{
return static::dateTimeBetween('-10 year', $max);
}
/**
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @example DateTime('2011-09-19 09:24:37')
* @return DateTime
*/
public static function dateTimeThisYear($max = 'now')
{
return static::dateTimeBetween('-1 year', $max);
}
/**
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @example DateTime('2011-10-05 12:51:46')
* @return DateTime
*/
public static function dateTimeThisMonth($max = 'now')
{
return static::dateTimeBetween('-1 month', $max);
}
/**
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @return string
* @example 'am'
*/
public static function amPm($max = 'now')
{
return static::dateTime($max)->format('a');
}
/**
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @return string
* @example '22'
*/
public static function dayOfMonth($max = 'now')
{
return static::dateTime($max)->format('d');
}
/**
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @return string
* @example 'Tuesday'
*/
public static function dayOfWeek($max = 'now')
{
return static::dateTime($max)->format('l');
}
/**
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @return string
* @example '7'
*/
public static function month($max = 'now')
{
return static::dateTime($max)->format('m');
}
/**
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @return string
* @example 'September'
*/
public static function monthName($max = 'now')
{
return static::dateTime($max)->format('F');
}
/**
* @param DateTime|int|string $max maximum timestamp used as random end limit, default to "now"
* @return int
* @example 1673
*/
public static function year($max = 'now')
{
return static::dateTime($max)->format('Y');
}
/**
* @return string
* @example 'XVII'
*/
public static function century()
{
return static::randomElement(static::$century);
}
/**
* @return string
* @example 'Europe/Paris'
*/
public static function timezone()
{
return static::randomElement(DateTimeZone::listIdentifiers());
}
/**
* Internal method to set the time zone on a DateTime.
*/
private static function setTimezone(DateTime $dt, $timezone)
{
return $dt->setTimezone(new DateTimeZone($timezone));
}
}