V8-archive: Datetime default value isn't formatted correctly

Created on 19 Oct 2018  路  13Comments  路  Source: directus/v8-archive

Describe the bug
Normal datetime values are returned in ISO format yyyy-mm-ddThh:mm:ss+00:00, however, default values for datetime are returned yyyy-mm-dd hh:mm:ss.

To Reproduce
Steps to reproduce the behavior:

  1. Set a defaultvalue for a datetime field
  2. Retrieve the field information using /fields
  3. See error

Expected behavior
The default value should be returned in the same format as regular values

bug

All 13 comments

i'm getting this error on the freshly installed 2.0.2 version, looks like this commit had something to do with it:

[2018-10-22 06:03:05] api[_].ERROR: TypeError: Argument 1 passed to Directus\Util\DateTimeUtils::createFromDateTime() must be an instance of DateTime, boolean given, called in /var/www/html/src/core/Directus/Util/DateTimeUtils.php on line 123 and defined in /var/www/html/src/core/Directus/Util/DateTimeUtils.php:96
Stack trace:
#0 /var/www/html/src/core/Directus/Util/DateTimeUtils.php(123): Directus\Util\DateTimeUtils::createFromDateTime(false)
#1 /var/www/html/src/core/Directus/Util/DateTimeUtils.php(109): Directus\Util\DateTimeUtils::createDateFromFormat('Y-m-d H:i:s', 'NULL', 'UTC')
#2 /var/www/html/src/core/Directus/Database/Schema/SchemaManager.php(569): Directus\Util\DateTimeUtils::createFromDefaultFormat('NULL', 'UTC')
#3 /var/www/html/src/core/Directus/Database/Schema/SchemaManager.php(269): Directus\Database\Schema\SchemaManager->createFieldFromArray(Array)
#4 /var/www/html/src/core/Directus/Database/TableGateway/BaseTableGateway.php(998): Directus\Database\Schema\SchemaManager->getFields('directus_activi...')
#5 /var/www/html/src/core/Directus/Database/TableGateway/BaseTableGateway.php(279): Directus\Database\TableGateway\BaseTableGateway->parseRecordValuesByType(Array)
#6 /var/www/html/src/core/Directus/Database/TableGateway/BaseTableGateway.php(817): Directus\Database\TableGateway\BaseTableGateway->find('1')
#7 /var/www/html/vendor/zendframework/zend-db/src/TableGateway/AbstractTableGateway.php(276): Directus\Database\TableGateway\BaseTableGateway->executeInsert(Object(Zend\Db\Sql\Insert))
#8 /var/www/html/src/core/Directus/Database/TableGateway/DirectusActivityTableGateway.php(66): Zend\Db\TableGateway\AbstractTableGateway->insertWith(Object(Zend\Db\Sql\Insert))
#9 /var/www/html/src/core/Directus/Services/AuthService.php(56): Directus\Database\TableGateway\DirectusActivityTableGateway->recordLogin('1')
#10 /var/www/html/src/endpoints/Auth.php(49): Directus\Services\AuthService->loginWithCredentials('[email protected]...', 'password')
#11 [internal function]: Directus\Api\Routes\Auth->authenticate(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Array)
#12 /var/www/html/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(41): call_user_func(Array, Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Array)
#13 /var/www/html/vendor/slim/slim/Slim/Route.php(356): Slim\Handlers\Strategies\RequestResponse->__invoke(Array, Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Array)
#14 /var/www/html/src/core/Directus/Application/Http/Middleware/TableGatewayMiddleware.php(25): Slim\Route->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#15 [internal function]: Directus\Application\Http\Middleware\TableGatewayMiddleware->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Slim\Route))
#16 /var/www/html/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Directus\Application\Http\Middleware\TableGatewayMiddleware), Array)
#17 [internal function]: Slim\DeferredCallable->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Slim\Route))
#18 /var/www/html/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Slim\Route))
#19 /var/www/html/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\Route->Slim\{closure}(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#20 /var/www/html/vendor/slim/slim/Slim/Route.php(334): Slim\Route->callMiddlewareStack(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#21 /var/www/html/vendor/slim/slim/Slim/App.php(515): Slim\Route->run(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#22 /var/www/html/src/core/Directus/Application/Http/Middleware/AbstractRateLimitMiddleware.php(34): Slim\App->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#23 [internal function]: Directus\Application\Http\Middleware\AbstractRateLimitMiddleware->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Directus\Application\Application))
#24 /var/www/html/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Directus\Application\Http\Middleware\IpRateLimitMiddleware), Array)
#25 [internal function]: Slim\DeferredCallable->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Directus\Application\Application))
#26 /var/www/html/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Directus\Application\Application))
#27 /var/www/html/vendor/akrabat/rka-ip-address-middleware/src/IpAddress.php(93): Slim\App->Slim\{closure}(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#28 [internal function]: RKA\Middleware\IpAddress->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Closure))
#29 /var/www/html/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(RKA\Middleware\IpAddress), Array)
#30 [internal function]: Slim\DeferredCallable->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Closure))
#31 /var/www/html/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Closure))
#32 /var/www/html/src/core/Directus/Application/Http/Middleware/CorsMiddleware.php(66): Slim\App->Slim\{closure}(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#33 [internal function]: Directus\Application\Http\Middleware\CorsMiddleware->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Closure))
#34 /var/www/html/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Directus\Application\Http\Middleware\CorsMiddleware), Array)
#35 [internal function]: Slim\DeferredCallable->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Closure))
#36 /var/www/html/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Closure))
#37 /var/www/html/src/core/Directus/Application/Http/Middleware/ResponseCacheMiddleware.php(47): Slim\App->Slim\{closure}(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#38 [internal function]: Directus\Application\Http\Middleware\ResponseCacheMiddleware->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Closure))
#39 /var/www/html/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Directus\Application\Http\Middleware\ResponseCacheMiddleware), Array)
#40 [internal function]: Slim\DeferredCallable->__invoke(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Closure))
#41 /var/www/html/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response), Object(Closure))
#42 /var/www/html/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\App->Slim\{closure}(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#43 /var/www/html/vendor/slim/slim/Slim/App.php(406): Slim\App->callMiddlewareStack(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#44 /var/www/html/vendor/slim/slim/Slim/App.php(314): Slim\App->process(Object(Directus\Application\Http\Request), Object(Directus\Application\Http\Response))
#45 /var/www/html/src/core/Directus/Application/Application.php(161): Slim\App->run(false)
#46 /var/www/html/public/index.php(5): Directus\Application\Application->run()
#47 {main} [] []

Looks like this needs more attention.

Instead of creating a new issue, perhaps this is why when I'm adding a new date-time I'm getting 16:00:00 returned as the time rather than the 12:00:00 I'm adding?..

Feel free to let me know if this is a new issue.

Steps to Reproduce

  1. Add a DateTime field to a collection's structure
  2. Head to the collection and add a new entry with your DateTime
  3. After adding entry, check the data, it will be different to what you entered usually shows (16:00:00).

Expected Behavior

When going back to edit my data, I would expect the time to be the same time entered (12:00:00)

Actual Behavior

When going back to edit my data, the data I entered is usually 16:00:00

Other Context & Screenshots

What was entered:
image

What was saved:
image

Hey @shealavington, All datetime are saved as UTC. That's why you are seeing that saved date differently. Are you server on a UTC-4 timezone?

@WellingGuzman Aren't "regular" date time columns just saving whatever is being send to them?

I am closing this ticket, and keep #531 open, as it's dedicated ticket for the issue this feature created.

@shealavington if you want to discuss this we could keep in on here, or do that in another ticket or over slack.

@rijkvanzanten it was changed to save all datetime to UTC.

Just a follow up here, we won't be changing user entered data... so all user times/datetimes will stay exactly as entered/sent. Only Directus System time will be stored in UTC.

I'm in the United Kingdom (UTC) which is why I was wondering why when I was entering 12:00 it was being changed to 16:00, I would expect it to save whatever time I enter.

I wonder if it's using server time and you have an NYC server, or if your user's timezone was left on the NYC default? Or if there's a bug in the code?

Either way, we're getting rid of this... whatever you save will be stored exactly as-is in the DB (#531)

or if your user's timezone was left on the NYC default? Or if there's a bug in the code?

This might indicate that the APIs default timezone is NYC?

If we can't automatically set this then we should have the Admin explicitly set this during API install.

I've just seen this in my user settings, however that's not a huge list to choose from, Y'know, coming from the UK, 馃槅
image

Was this page helpful?
0 / 5 - 0 ratings

Related issues

gitlabisbetterthangithub picture gitlabisbetterthangithub  路  3Comments

cdwmhcc picture cdwmhcc  路  3Comments

Nitwel picture Nitwel  路  3Comments

andgar2010 picture andgar2010  路  3Comments

Varulv1997 picture Varulv1997  路  3Comments