From 43dae0d945fa7ad70bd77c30879844a295d73bbc Mon Sep 17 00:00:00 2001 From: Jose Lorenzo Rodriguez Date: Tue, 15 Apr 2014 19:51:34 +0200 Subject: [PATCH] Chaged the database DateTimeType so it creates Carbon objects --- src/Database/Type/DateTimeType.php | 34 ++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/Database/Type/DateTimeType.php b/src/Database/Type/DateTimeType.php index 94363cf173f..66bb64608a7 100644 --- a/src/Database/Type/DateTimeType.php +++ b/src/Database/Type/DateTimeType.php @@ -15,7 +15,6 @@ namespace Cake\Database\Type; use Cake\Database\Driver; -use \DateTime; /** * Datetime type converter. @@ -24,6 +23,13 @@ */ class DateTimeType extends \Cake\Database\Type { +/** + * The class to use for representing date objects + * + * @var string + */ + public static $dateTimeClass = 'Carbon\Carbon'; + /** * String format to use for DateTime parsing * @@ -31,6 +37,18 @@ class DateTimeType extends \Cake\Database\Type { */ protected $_format = 'Y-m-d H:i:s'; +/** + * {@inheritdoc} + * + */ + public function __construct($name = null) { + parent::__construct($name); + + if (!class_exists(static::$dateTimeClass)) { + static::$dateTimeClass = 'DateTime'; + } + } + /** * Convert DateTime instance into strings. * @@ -50,30 +68,32 @@ public function toDatabase($value, Driver $driver) { * * @param string $value The value to convert. * @param Driver $driver The driver instance to convert with. - * @return Datetime + * @return \Carbon\Carbon */ public function toPHP($value, Driver $driver) { if ($value === null) { return null; } list($value) = explode('.', $value); - return DateTime::createFromFormat($this->_format, $value); + $class = static::$dateTimeClass; + return $class::createFromFormat($this->_format, $value); } /** * Convert request data into a datetime object. * * @param mixed $value Request data - * @return \DateTime + * @return \Carbon\Carbon */ public function marshal($value) { + $class = static::$dateTimeClass; try { if ($value === '' || $value === null || $value === false || $value === true) { return $value; } elseif (is_numeric($value)) { - $date = new DateTime('@' . $value); + $date = new $class('@' . $value); } elseif (is_string($value)) { - $date = new DateTime($value); + $date = new $class($value); } if (isset($date)) { return $date; @@ -84,7 +104,7 @@ public function marshal($value) { $value += ['second' => 0]; - $date = new DateTime(); + $date = new $class(); $date->setTime(0, 0, 0); if ( isset($value['year'], $value['month'], $value['day']) &&