diff --git a/DataStorage/Database/Connection/SqlServerConnection.php b/DataStorage/Database/Connection/SqlServerConnection.php index 382069f8d..36b5444b9 100644 --- a/DataStorage/Database/Connection/SqlServerConnection.php +++ b/DataStorage/Database/Connection/SqlServerConnection.php @@ -48,6 +48,11 @@ final class SqlServerConnection extends ConnectionAbstract $this->grammar = new SqlServerGrammar(); $this->schemaGrammar = new SqlServerSchemaGrammar(); + if (isset($dbdata['datetimeformat'])) { + $this->grammar->setDateTimeFormat($dbdata['datetimeformat']); + $this->schemaGrammar->setDateTimeFormat($dbdata['datetimeformat']); + } + $this->dbdata = $dbdata; } diff --git a/DataStorage/Database/GrammarAbstract.php b/DataStorage/Database/GrammarAbstract.php index 2234e3aac..6a54a9a08 100644 --- a/DataStorage/Database/GrammarAbstract.php +++ b/DataStorage/Database/GrammarAbstract.php @@ -86,6 +86,28 @@ abstract class GrammarAbstract 'MIN(', ]; + /** + * Datetime format. + * + * @var string + * @since 1.0.0 + */ + protected string $datetimeFormat = 'Y-m-d H:i:s'; + + /** + * Set the datetime format + * + * @param string $format Datetime format + * + * @return void + * + * @since 1.0.0 + */ + public function setDateTimeFormat(string $format) : void + { + $this->datetimeFormat = $format; + } + /** * Compile to query. * diff --git a/DataStorage/Database/Query/Grammar/Grammar.php b/DataStorage/Database/Query/Grammar/Grammar.php index 701937ba5..45e69aec9 100644 --- a/DataStorage/Database/Query/Grammar/Grammar.php +++ b/DataStorage/Database/Query/Grammar/Grammar.php @@ -340,7 +340,7 @@ class Grammar extends GrammarAbstract return '(' . \rtrim($values, ', ') . ')'; } elseif ($value instanceof \DateTime) { - return $query->quote($value->format('Y-m-d H:i:s')); + return $query->quote($value->format($this->datetimeFormat)); } elseif ($value === null) { return 'NULL'; } elseif (\is_bool($value)) { diff --git a/Utils/IO/Zip/Zip.php b/Utils/IO/Zip/Zip.php index eba06bf01..b4f736878 100644 --- a/Utils/IO/Zip/Zip.php +++ b/Utils/IO/Zip/Zip.php @@ -54,6 +54,9 @@ class Zip implements ArchiveInterface $source = $relative; } + $source = \str_replace('\\', '/', $source); + $relative = \str_replace('\\', '/', $relative); + if (\is_dir($source)) { $files = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($source), @@ -72,7 +75,7 @@ class Zip implements ArchiveInterface $absolute = \realpath($file); $absolute = \str_replace('\\', '/', (string) $absolute); - $dir = \str_replace($source . '/', '', $relative . '/' . $absolute); + $dir = \str_replace($source . '/', '', \rtrim($relative, '/\\') . '/' . \ltrim($absolute, '/\\')); if (\is_dir($absolute)) { $zip->addEmptyDir($dir . '/');