<?php
/**
* @package DATA
*/
/**
* A concrete factory for inboxing string with mysql datetime format
* into datetime objects.
*/
class DATA_MySQL5_SQLDatetimeFactory extends DATA_SQLTypeFactory {
/**
* Flags the type to nullable or not nullable.
* @var boolean
*/
private $nullable;
/**
* Constructor.
*
* @param boolean $nullable True if the type is nullable.
*/
public function __construct($nullable) {
$this->nullable = $nullable;
}
/**
* Inboxes a value.
*
* Throws {@link DATA_InvalidDatetime}.
*
* @param mixed $value The value.
* @return DATA_SQLDatetime Inboxed value.
*/
public function inbox($value) {
if ($value instanceof DATA_SQLDatetime) {
if ($this->nullable == $value->isNullable()) {
return clone $value;
}
}
if ($value instanceof DATA_SQLType) {
$value = $value->outbox();
}
if ($value === null) {
return new DATA_SQLDate($this->nullable);
}
if (!preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/', $value)) {
throw new DATA_InvalidDatetime($value);
}
list($date, $time) = explode(' ', $value);
list($year, $month, $day) = explode('-', $date);
list($hour, $minutes, $seconds) = explode(':', $time);
return new DATA_SQLDatetime($this->nullable, $year, $month, $day, $hour, $minutes, $seconds);
}
}
?>
|