1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73:
<?php
namespace Coast\Transformer\Rule;
use Coast\Transformer\Rule;
class DateTime extends Rule
{
protected $_format;
protected $_timezone;
public function __construct($format = null, $timezone = null)
{
$this->format($format);
$this->timezone($timezone);
}
public function format($format = null)
{
if (func_num_args() > 0) {
$this->_format = $format;
return $this;
}
return $this->_format;
}
public function timezone($timezone = null)
{
if (func_num_args() > 0) {
$this->_timezone = $timezone;
return $this;
}
return $this->_timezone;
}
protected function _transform($value)
{
$defaultTimezone = new \DateTimezone(date_default_timezone_get());
if (is_scalar($value)) {
$timezone = isset($this->_timezone)
? new \DateTimezone($this->_timezone)
: $defaultTimezone;
if (isset($this->_format)) {
$date = \DateTime::createFromFormat($this->_format, $value, $timezone);
if ($date === false) {
return $value;
}
} else {
try {
$date = new \DateTime($value, $timezone);
} catch (\Exception $e) {
return $value;
}
}
$date->setTimezone($defaultTimezone);
} else if (is_array($value)) {
try {
$date = new \DateTime($value['date'], new \DateTimezone($value['timezone']));
} catch (\Exception $e) {
return $value;
}
$date->setTimezone($defaultTimezone);
} else {
return $value;
}
return $date;
}
}