Skip to content

Commit

Permalink
replace "dateTime" to "datetime" & "DateTime" to "Datetime" to keep o…
Browse files Browse the repository at this point in the history
…ne naming standard
  • Loading branch information
barbushin committed Mar 26, 2013
1 parent ef7151a commit dc98040
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 82 deletions.
42 changes: 21 additions & 21 deletions examples/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
$dater = new Dater\Dater(new Dater\Locale\En());

echo '<pre>';
echo '<h2>Datetime source type</h2>';
echo '<h2>Datetime source types</h2>';
$weekAgoTimestamp = time() - 60 * 60 * 24 * 7;
$weekAgoDateTime = date('Y-m-d H:i:s', $weekAgoTimestamp);
echo 'Server datetime (default = current): ' . $dater->serverDateTime() . PHP_EOL;
echo 'Server datetime by week ago timestamp: ' . $dater->serverDateTime($weekAgoTimestamp) . PHP_EOL;
echo 'Server datetime by week ago YYYY-MM-DD HH:II:SS: ' . $dater->serverDateTime($weekAgoDateTime) . PHP_EOL;
$weekAgoDatetime = date('Y-m-d H:i:s', $weekAgoTimestamp);
echo 'Server datetime (default = current): ' . $dater->serverDatetime() . PHP_EOL;
echo 'Server datetime by week ago timestamp: ' . $dater->serverDatetime($weekAgoTimestamp) . PHP_EOL;
echo 'Server datetime by week ago YYYY-MM-DD HH:II:SS: ' . $dater->serverDatetime($weekAgoDatetime) . PHP_EOL;

echo '<h2>Timezone and datetime in server format</h2>';

Expand All @@ -22,21 +22,21 @@
echo 'Client date: ' . $dater->isoDate() . PHP_EOL;
echo 'Server time: ' . $dater->serverTime() . PHP_EOL;
echo 'Client time: ' . $dater->isoTime() . PHP_EOL;
echo 'Server datetime: ' . $dater->serverDateTime() . PHP_EOL;
echo 'Server datetime: ' . $dater->serverDatetime() . PHP_EOL;
echo 'Client datetime: ' . $dater->isoDatetime() . PHP_EOL;

$dater->setClientTimezone('Europe/Minsk');
echo 'Set client timezone: ' . $dater->getClientTimezone() . PHP_EOL;
echo 'Server datetime: ' . $dater->serverDateTime() . PHP_EOL;
echo 'Server datetime: ' . $dater->serverDatetime() . PHP_EOL;
echo 'Client datetime: ' . $dater->isoDatetime() . PHP_EOL;

echo '<h2>DateTime object init & format. Dater\Dater::modify() method</h2>';

$dateTime = $dater->initDateTime($weekAgoDateTime, 'Europe/London', 'UTC');
$dateTime->modify('+10 years');
echo 'Modified & formatted DateTime object: ' . $dater->formatDateTime($dateTime, 'date') . PHP_EOL;
$datetime = $dater->initDatetimeObject($weekAgoDatetime, 'Europe/London', 'UTC');
$datetime->modify('+10 years');
echo 'Modified & formatted DateTime object: ' . $dater->formatDatetimeObject($datetime, 'date') . PHP_EOL;
// or same thing in one line with Dater\Dater :)
echo 'Modify & format using Dater\Dater::modify(): ' . $dater->modify($weekAgoDateTime, '+10 years', 'date', 'Europe/London', 'UTC');
echo 'Modify & format using Dater\Dater::modify(): ' . $dater->modify($weekAgoDatetime, '+10 years', 'date', 'Europe/London', 'UTC');

echo '<h2>Locales</h2>';

Expand All @@ -59,25 +59,25 @@

echo 'Set new "week_date" format as "d F, D"' . PHP_EOL;
$dater->setFormat('week_date', 'd F, D');
echo 'User week_date: ' . $dater->format($weekAgoDateTime, 'week_date') . PHP_EOL;
echo 'User week_date: ' . $dater->format($weekAgoDatetime, 'week_date') . PHP_EOL;

echo '<h2>Custom format options</h2>';

echo 'Add new format option "ago" that will return date days left' . PHP_EOL;
$dater->addFormatOption('ago', function (DateTime $dateTime) {
return floor((time() - $dateTime->getTimestamp()) / 86400) . ' days ago';
$dater->addFormatOption('ago', function (DateTime $datetime) {
return floor((time() - $datetime->getTimestamp()) / 86400) . ' days ago';
});
echo 'User week ago date in format "d F Y, ago": ' . $dater->format($weekAgoDateTime, 'd F Y, ago') . PHP_EOL;
echo 'User week ago date in format "d F Y, ago": ' . $dater->format($weekAgoDatetime, 'd F Y, ago') . PHP_EOL;
echo 'So again, lets bind "d F Y, ago" format to alias "week_date_ago"' . PHP_EOL;
$dater->setFormat('week_date_ago', 'd F Y, ago');
echo 'User week ago date in format "week_date_ago": ' . $dater->format($weekAgoDateTime, 'week_date_ago') . PHP_EOL;
echo 'User week ago date in format "week_date_ago": ' . $dater->format($weekAgoDatetime, 'week_date_ago') . PHP_EOL;

echo '<h2>Convert request datetime to server timezone</h2>';
echo 'Server timezone: ' . $dater->getServerTimezone() . PHP_EOL;
echo 'Client timezone: ' . $dater->getClientTimezone() . PHP_EOL;

$_GET = array('filter' => array('startsFrom' => $weekAgoDateTime));
$_POST = array('event' => array('starts' => $weekAgoDateTime));
$_GET = array('filter' => array('startsFrom' => $weekAgoDatetime));
$_POST = array('event' => array('starts' => $weekAgoDatetime));
$_REQUEST = array_merge($_GET, $_POST);

echo 'Client original request data: ' . PHP_EOL;
Expand All @@ -98,9 +98,9 @@
$data = 'Timestamp format: ' . $weekAgoTimestamp . ' (will not be handled)
Timestamp format: ' . $weekAgoTimestamp . '[Y/m/d]
Timestamp format: ' . $weekAgoTimestamp . '[datetime]
Server datetime format: ' . $weekAgoDateTime . '[Y/m/d]
Server datetime format: ' . $weekAgoDateTime . '[time]
Server datetime format: ' . $weekAgoDateTime;
Server datetime format: ' . $weekAgoDatetime . '[Y/m/d]
Server datetime format: ' . $weekAgoDatetime . '[time]
Server datetime format: ' . $weekAgoDatetime;

echo '<h3>Original data</h3>';
echo $data;
Expand Down
16 changes: 8 additions & 8 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ You can see [package information on Packagist.](https://packagist.org/packages/d

# Features

For all features using examples see [/example/index.php](https://github.com/barbushin/dater/blob/master/example/index.php). PHP > 5.3 required.
For all features using examples see [/example/index.php](https://github.com/barbushin/dater/blob/master/examples/index.php). PHP > 5.3 required.

### Timestamp/datetime input formats support

Expand All @@ -37,8 +37,8 @@ For all features using examples see [/example/index.php](https://github.com/barb

All [date()](http://php.net/date) format options available and can be overrided or extended:

$dater->addFormatOption('ago', function (DateTime $dateTime) {
return floor((time() - $dateTime->getTimestamp()) / 86400) . ' days ago';
$dater->addFormatOption('ago', function (DateTime $datetime) {
return floor((time() - $datetime->getTimestamp()) / 86400) . ' days ago';
});
$dater->format(time() - 60*60*24*7, 'd F Y, ago'); // 14 March 2013, 7 days ago

Expand All @@ -62,21 +62,21 @@ All [date()](http://php.net/date) format options available and can be overrided
echo $dater->isoDatetime(); // 2013-03-21 05:41:28 (client timezone)
echo $dater->serverDate(); // 2013-03-21 (server timezone)
echo $dater->serverTime(); // 09:41:28 (server timezone)
echo $dater->serverDateTime(); // 2013-03-21 09:41:28 (server timezone)
echo $dater->serverDatetime(); // 2013-03-21 09:41:28 (server timezone)

### Native PHP DateTime class object init & formatting

$dateTime = $dater->initDateTime('2013-03-21 08:18:06', 'UTC', 'Europe/London');
$dateTime->modify('+10 years');
echo $dater->formatDateTime($dateTime, 'date'); // 03/21/2023
$datetime = $dater->initDatetimeObject('2013-03-21 08:18:06', 'UTC', 'Europe/London');
$datetime->modify('+10 years');
echo $dater->formatDatetimeObject($datetime, 'date'); // 03/21/2023
// or same thing in one line with Dater\Dater :)
echo $dater->modify('2013-03-21 08:18:06', 'date', 'UTC', 'Europe/London'); // 03/21/2023

### Timezones conversion

$dater->setServerTimezone('Europe/Moscow');
$dater->setClientTimezone('Europe/London');
echo $dater->serverDateTime(); // 2013-03-21 08:18:06
echo $dater->serverDatetime(); // 2013-03-21 08:18:06
echo $dater->isoDatetime(); // 2013-03-21 04:18:06
echo $dater->time(); // 04:18

Expand Down
106 changes: 53 additions & 53 deletions src/Dater/Dater.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
* @copyright © Sergey Barbushin, 2013. Some rights reserved.
*
* All this methods works through Dater::__call method, mapped to format date with Dater::$formats[METHOD_NAME] format:
* @method date($dateTimeOrTimestamp = null) Get date in Dater::$formats['date'] format, in client timezone
* @method time($dateTimeOrTimestamp = null) Get date in Dater::$formats['time'] format, in client timezone
* @method datetime($dateTimeOrTimestamp = null) Get date in Dater::$formats['datetime'] format, in client timezone
* @method isoDate($dateTimeOrTimestamp = null) Get date in Dater::$formats['isoDate'] format, in client timezone
* @method isoTime($dateTimeOrTimestamp = null) Get date in Dater::$formats['isoTime'] format, in client timezone
* @method isoDatetime($dateTimeOrTimestamp = null) Get date in Dater::$formats['isoDatetime'] format, in client timezone
* @method date($datetimeOrTimestamp = null) Get date in Dater::$formats['date'] format, in client timezone
* @method time($datetimeOrTimestamp = null) Get date in Dater::$formats['time'] format, in client timezone
* @method datetime($datetimeOrTimestamp = null) Get date in Dater::$formats['datetime'] format, in client timezone
* @method isoDate($datetimeOrTimestamp = null) Get date in Dater::$formats['isoDate'] format, in client timezone
* @method isoTime($datetimeOrTimestamp = null) Get date in Dater::$formats['isoTime'] format, in client timezone
* @method isoDatetime($datetimeOrTimestamp = null) Get date in Dater::$formats['isoDatetime'] format, in client timezone
*/
class Dater {

Expand Down Expand Up @@ -84,14 +84,14 @@ public function setLocale(Locale $locale) {

protected function initCustomFormatOptions() {
$dater = $this;
$this->addFormatOption('F', function (\DateTime $dateTime) use ($dater) {
return $dater->getLocale()->getMonth($dateTime->format('n') - 1);
$this->addFormatOption('F', function (\DateTime $datetime) use ($dater) {
return $dater->getLocale()->getMonth($datetime->format('n') - 1);
});
$this->addFormatOption('l', function (\DateTime $dateTime) use ($dater) {
return $dater->getLocale()->getWeekDay($dateTime->format('N') - 1);
$this->addFormatOption('l', function (\DateTime $datetime) use ($dater) {
return $dater->getLocale()->getWeekDay($datetime->format('N') - 1);
});
$this->addFormatOption('D', function (\DateTime $dateTime) use ($dater) {
return $dater->getLocale()->getWeekDayShort($dateTime->format('N') - 1);
$this->addFormatOption('D', function (\DateTime $datetime) use ($dater) {
return $dater->getLocale()->getWeekDayShort($datetime->format('N') - 1);
});
}

Expand Down Expand Up @@ -139,13 +139,13 @@ protected function stashCustomFormatOptions(&$format) {
/**
* Stash custom format options from standard PHP \DateTime format parser
* @param $format
* @param \DateTime $dateTime
* @param \DateTime $datetime
* @return bool Return true if there was any custom options in $format
*/
protected function applyCustomFormatOptions(&$format, \DateTime $dateTime) {
protected function applyCustomFormatOptions(&$format, \DateTime $datetime) {
$formatOptionsCallbacks = $this->formatOptionsCallbacks;
$format = preg_replace_callback('/~(\d+)~/', function ($matches) use ($dateTime, $formatOptionsCallbacks) {
return call_user_func($formatOptionsCallbacks[$matches[1]], $dateTime);
$format = preg_replace_callback('/~(\d+)~/', function ($matches) use ($datetime, $formatOptionsCallbacks) {
return call_user_func($formatOptionsCallbacks[$matches[1]], $datetime);
}, $format);
}

Expand All @@ -161,21 +161,21 @@ public function now($format, $outputTimezone = null) {

/**
* Init standard \DateTime object configured to outputTimezone corresponding to inputTimezone
* @param null $dateTimeOrTimestamp
* @param null $datetimeOrTimestamp
* @param null $inputTimezone
* @param null $outputTimezone
* @return \DateTime
*/
public function initDateTime($dateTimeOrTimestamp = null, $inputTimezone = null, $outputTimezone = null) {
public function initDatetimeObject($datetimeOrTimestamp = null, $inputTimezone = null, $outputTimezone = null) {
if(!$inputTimezone) {
$inputTimezone = $this->serverTimezone;
}
if(!$outputTimezone) {
$outputTimezone = $this->clientTimezone;
}

if(strlen($dateTimeOrTimestamp) == 10) {
$isTimeStamp = is_numeric($dateTimeOrTimestamp);
if(strlen($datetimeOrTimestamp) == 10) {
$isTimeStamp = is_numeric($datetimeOrTimestamp);
$isDate = !$isTimeStamp;
}
else {
Expand All @@ -184,91 +184,91 @@ public function initDateTime($dateTimeOrTimestamp = null, $inputTimezone = null,
}

if($isTimeStamp) {
$dateTime = new \DateTime();
$dateTime->setTimestamp($dateTimeOrTimestamp);
$datetime = new \DateTime();
$datetime->setTimestamp($datetimeOrTimestamp);
}
else {
$dateTime = new \DateTime($dateTimeOrTimestamp, $inputTimezone ? $this->getTimezoneObject($inputTimezone) : null);
$datetime = new \DateTime($datetimeOrTimestamp, $inputTimezone ? $this->getTimezoneObject($inputTimezone) : null);
}

if(!$isDate && $outputTimezone && $outputTimezone != $inputTimezone) {
$dateTime->setTimezone($this->getTimezoneObject($outputTimezone));
$datetime->setTimezone($this->getTimezoneObject($outputTimezone));
}
return $dateTime;
return $datetime;
}

/**
* Format \DateTime object to http://php.net/date format or format name
* @param \DateTime $dateTime
* @param \DateTime $datetime
* @param $format
* @return string
*/
public function formatDateTime(\DateTime $dateTime, $format) {
public function formatDatetimeObject(\DateTime $datetime, $format) {
$format = $this->getFormat($format) ? : $format;
$isStashed = $this->stashCustomFormatOptions($format);
$result = $dateTime->format($format);
$result = $datetime->format($format);
if($isStashed) {
$this->applyCustomFormatOptions($result, $dateTime);
$this->applyCustomFormatOptions($result, $datetime);
}
return $result;
}

/**
* Format date/datetime/timestamp to specified format with timezone converting
* @param string|int|null $dateTimeOrTimestamp Default value current timestamp
* @param string|int|null $datetimeOrTimestamp Default value current timestamp
* @param string|null $format http://php.net/date format or format name. Default value is current
* @param string|null $outputTimezone Default value is Dater::$clientTimezone
* @param string|null $inputTimezone Default value is Dater::$serverTimezone
* @return string
*/
public function format($dateTimeOrTimestamp, $format, $outputTimezone = null, $inputTimezone = null) {
$dateTime = $this->initDateTime($dateTimeOrTimestamp, $inputTimezone, $outputTimezone);
$result = $this->formatDateTime($dateTime, $format);
public function format($datetimeOrTimestamp, $format, $outputTimezone = null, $inputTimezone = null) {
$datetime = $this->initDatetimeObject($datetimeOrTimestamp, $inputTimezone, $outputTimezone);
$result = $this->formatDatetimeObject($datetime, $format);
return $result;
}

/**
* @param $dateTimeOrTimestamp
* @param $datetimeOrTimestamp
* @param string $modify Modification string as in http://php.net/date_modify
* @param string|null $format http://php.net/date format or format name. Default value is Dater::ISO_DATETIME_FORMAT
* @param string|null $outputTimezone Default value is Dater::$serverTimezone
* @param string|null $inputTimezone Default value is Dater::$serverTimezone
* @return string
*/
public function modify($dateTimeOrTimestamp, $modify, $format = null, $outputTimezone = null, $inputTimezone = null) {
public function modify($datetimeOrTimestamp, $modify, $format = null, $outputTimezone = null, $inputTimezone = null) {
$format = $format ? : self::ISO_DATETIME_FORMAT;
$outputTimezone = $outputTimezone ? : $this->serverTimezone;
$inputTimezone = $inputTimezone ? : $this->serverTimezone;
$dateTime = $this->initDateTime($dateTimeOrTimestamp, $inputTimezone, $outputTimezone);
$dateTime->modify($modify);
return $this->formatDateTime($dateTime, $format);
$datetime = $this->initDatetimeObject($datetimeOrTimestamp, $inputTimezone, $outputTimezone);
$datetime->modify($modify);
return $this->formatDatetimeObject($datetime, $format);
}

/**
* Get date in YYYY-MM-DD format, in server timezone
* @param string|int|null $serverDateTimeOrTimestamp
* @param string|int|null $serverDatetimeOrTimestamp
* @return string
*/
public function serverDate($serverDateTimeOrTimestamp = null) {
return $this->format($serverDateTimeOrTimestamp, self::ISO_DATE_FORMAT, $this->serverTimezone);
public function serverDate($serverDatetimeOrTimestamp = null) {
return $this->format($serverDatetimeOrTimestamp, self::ISO_DATE_FORMAT, $this->serverTimezone);
}

/**
* Get date in HH-II-SS format, in server timezone
* @param string|int|null $serverDateTimeOrTimestamp
* @param string|int|null $serverDatetimeOrTimestamp
* @return string
*/
public function serverTime($serverDateTimeOrTimestamp = null) {
return $this->format($serverDateTimeOrTimestamp, self::ISO_TIME_FORMAT, $this->serverTimezone);
public function serverTime($serverDatetimeOrTimestamp = null) {
return $this->format($serverDatetimeOrTimestamp, self::ISO_TIME_FORMAT, $this->serverTimezone);
}

/**
* Get datetime in YYYY-MM-DD HH:II:SS format, in server timezone
* @param null $serverDateTimeOrTimestamp
* @param null $serverDatetimeOrTimestamp
* @return string
*/
public function serverDateTime($serverDateTimeOrTimestamp = null) {
return $this->format($serverDateTimeOrTimestamp, self::ISO_DATETIME_FORMAT, $this->serverTimezone);
public function serverDatetime($serverDatetimeOrTimestamp = null) {
return $this->format($serverDatetimeOrTimestamp, self::ISO_DATETIME_FORMAT, $this->serverTimezone);
}

public function setFormat($alias, $format) {
Expand All @@ -282,7 +282,7 @@ protected function getFormat($alias) {
}

/**
* Get DateTimezone object by timezone name
* Get Datetimezone object by timezone name
* @param $timezone
* @return \DateTimezone
*/
Expand All @@ -294,24 +294,24 @@ protected function getTimezoneObject($timezone) {
}

/**
* Magic call of $dater->format($dateTimeOrTimestamp, $formatAlias).
* Magic call of $dater->format($datetimeOrTimestamp, $formatAlias).
*
* Example:
* $dater->addFormat('shortDate', 'd/m')
* echo $dater->shortDate(time());
* To annotate available formats-methods just add to Dater class annotations like:
* @method shortDate($dateTimeOrTimestamp = null)
* @method shortDate($datetimeOrTimestamp = null)
*
* @param $formatAlias
* @param array $dateTimeOrTimestampArg
* @param array $datetimeOrTimestampArg
* @return string
* @throws \Exception
*/
public function __call($formatAlias, array $dateTimeOrTimestampArg) {
public function __call($formatAlias, array $datetimeOrTimestampArg) {
$formatAlias = $this->getFormat($formatAlias);
if(!$formatAlias) {
throw new \Exception('There is no method or format with name "' . $formatAlias . '"');
}
return $this->format(reset($dateTimeOrTimestampArg), $formatAlias);
return $this->format(reset($datetimeOrTimestampArg), $formatAlias);
}
}

0 comments on commit dc98040

Please sign in to comment.