diff --git a/src/Adapter/Mysql/MysqlParameterBuilder.php b/src/Adapter/Mysql/MysqlParameterBuilder.php index 2900251..2969c88 100644 --- a/src/Adapter/Mysql/MysqlParameterBuilder.php +++ b/src/Adapter/Mysql/MysqlParameterBuilder.php @@ -170,7 +170,7 @@ public function toDate(mixed $value): string } // DateTime - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return sprintf("STR_TO_DATE('%s', '%s')", $value->format(sprintf('Y%sm%sd', self::$dateDelimiter, @@ -258,7 +258,7 @@ public function toTimestamp(mixed $value): string $value->setTimezone(new \DateTimeZone(date_default_timezone_get())); } - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return sprintf("STR_TO_DATE('%s', '%s')", $value->format(sprintf('Y%sm%sd%sH%si%ss', self::$dateDelimiter, @@ -360,7 +360,7 @@ public function toTime(mixed $value): string } // DateTime - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return sprintf("'%s'", $value->format(sprintf('H%si%ss', self::$timeDelimiter, self::$timeDelimiter diff --git a/src/Adapter/Sqlite/SqliteParameterBuilder.php b/src/Adapter/Sqlite/SqliteParameterBuilder.php index fbe654b..a69f87f 100644 --- a/src/Adapter/Sqlite/SqliteParameterBuilder.php +++ b/src/Adapter/Sqlite/SqliteParameterBuilder.php @@ -148,7 +148,7 @@ public function toDate(mixed $value): string // DateTime // SQLiteの日付関数は固定書式 - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return sprintf("date('%s')", $value->format('Y-m-d')); } @@ -218,7 +218,7 @@ public function toTimestamp(mixed $value): string // DateTime // SQLiteの日付関数は固定書式 - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return sprintf("datetime('%s')", $value->format('Y-m-d H:i:s')); } diff --git a/tests/Volcanus/QueryBuilder/Test/Adapter/Mysql/MysqlParameterBuilderTest.php b/tests/Volcanus/QueryBuilder/Test/Adapter/Mysql/MysqlParameterBuilderTest.php index a9ef687..16599ef 100644 --- a/tests/Volcanus/QueryBuilder/Test/Adapter/Mysql/MysqlParameterBuilderTest.php +++ b/tests/Volcanus/QueryBuilder/Test/Adapter/Mysql/MysqlParameterBuilderTest.php @@ -363,6 +363,14 @@ public function testToDateForDateTime() $this->assertEquals("STR_TO_DATE('2013-01-02', '%Y-%m-%d')", $builder->ToDate(new \DateTime('2013-01-02'))); } + public function testToDateForDateTimeImmutable() + { + $builder = new MysqlParameterBuilder( + new PdoDriver($this->getPdo(), new MysqlMetaDataProcessor()) + ); + $this->assertEquals("STR_TO_DATE('2013-01-02', '%Y-%m-%d')", $builder->ToDate(new \DateTimeImmutable('2013-01-02'))); + } + public function testToDateForUnixTimestamp() { $builder = new MysqlParameterBuilder( @@ -490,6 +498,14 @@ public function testToTimestampForDateTime() $this->assertEquals("STR_TO_DATE('2013-01-02 03:04:05', '%Y-%m-%d %H:%i:%s')", $builder->toTimestamp(new \DateTime('2013-01-02 03:04:05'))); } + public function testToTimestampForDateTimeImmutable() + { + $builder = new MysqlParameterBuilder( + new PdoDriver($this->getPdo(), new MysqlMetaDataProcessor()) + ); + $this->assertEquals("STR_TO_DATE('2013-01-02 03:04:05', '%Y-%m-%d %H:%i:%s')", $builder->toTimestamp(new \DateTimeImmutable('2013-01-02 03:04:05'))); + } + public function testToTimestampForUnixTimestamp() { $builder = new MysqlParameterBuilder( @@ -596,6 +612,14 @@ public function testToTimeForDateTime() $this->assertEquals("'03:04:05'", $builder->toTime(new \DateTime('2013-01-02 03:04:05'))); } + public function testToTimeForDateTimeImmutable() + { + $builder = new MysqlParameterBuilder( + new PdoDriver($this->getPdo(), new MysqlMetaDataProcessor()) + ); + $this->assertEquals("'03:04:05'", $builder->toTime(new \DateTimeImmutable('2013-01-02 03:04:05'))); + } + public function testToTimeForUnixTimestamp() { $builder = new MysqlParameterBuilder( diff --git a/tests/Volcanus/QueryBuilder/Test/Adapter/Sqlite/SqliteParameterBuilderTest.php b/tests/Volcanus/QueryBuilder/Test/Adapter/Sqlite/SqliteParameterBuilderTest.php index 25a38d3..a4c3f65 100644 --- a/tests/Volcanus/QueryBuilder/Test/Adapter/Sqlite/SqliteParameterBuilderTest.php +++ b/tests/Volcanus/QueryBuilder/Test/Adapter/Sqlite/SqliteParameterBuilderTest.php @@ -285,6 +285,14 @@ public function testToDateForDateTime() $this->assertEquals("date('2013-01-02')", $builder->ToDate(new \DateTime('2013-01-02'))); } + public function testToDateForDateTimeImmutable() + { + $builder = new SqliteParameterBuilder( + new PdoDriver($this->getPdo(), new SqliteMetaDataProcessor()) + ); + $this->assertEquals("date('2013-01-02')", $builder->ToDate(new \DateTimeImmutable('2013-01-02'))); + } + public function testToDateForUnixTimestamp() { $builder = new SqliteParameterBuilder( @@ -397,6 +405,14 @@ public function testToTimestampForDateTime() $this->assertEquals("datetime('2013-01-02 03:04:05')", $builder->toTimestamp(new \DateTime('2013-01-02 03:04:05'))); } + public function testToTimestampForDateTimeImmutable() + { + $builder = new SqliteParameterBuilder( + new PdoDriver($this->getPdo(), new SqliteMetaDataProcessor()) + ); + $this->assertEquals("datetime('2013-01-02 03:04:05')", $builder->toTimestamp(new \DateTimeImmutable('2013-01-02 03:04:05'))); + } + public function testToTimestampForUnixTimestamp() { $builder = new SqliteParameterBuilder(