Bug #96890
openWrong processing and display of native datetime(dbType) fields due to server timezone
0%
Description
Wrong processing and display of native datetime(dbType) fields due to server timezone¶
Inside DatabaseRowDateTimeFields
class native datetime (dbType) values are treated as UTC values, whereas the rest uses the local timezone (e.g. BackendUtility::datetime).
This causes the TCA title (bug 1) and readOnly fields (bug 2) to be formatted wrong (with an time offset).
The conversion also breaks the title for time fields (bug 3) completely.
Prerequisite¶
- Timezone != 'UTC', e.g.
timezone: America/New_York
(.ddev/config.yaml) - Specified configuration (see below)
Steps to reproduce¶
Bug 1¶
- Create a new
DateTime title error
record and set mydatetime to12:00 20-02-2022
- Save record
- Look at the record title
- Actual value (wrong time):
Edit DateTime title error "20-02-22 07:00" on page "recordStorage"
- Expected value:
Edit DateTime title error "20-02-22 12:00" on page "recordStorage"
- Actual value (wrong time):
Bug 2¶
- Uncomment
readOnly
in TCA and clear cache/reload - Open record from bug 1
- Look at the disable field (mydatetime)
- Actual value (wrong time):
20-02-22 07:00
- Expected value:
20-02-22 12:00
- Actual value (wrong time):
Bug 3¶
- Change TCA config for bug 3 and clear cache/reload
- Create a new
DateTime title error
record and set mytime to12:00
- Save record
- Actual value:
2022-02-12T07:00:00-05:00
- Expected value:
12:00
- Actual value:
Configuration¶
TCA:
return [
'ctrl' => [
'title' => 'DateTime title error',
'label' => 'mydatetime', // Bug 1 and 2
// 'label' => 'time', // Bug 3
],
'columns' => [
// Bug 1 and 2
'mydatetime' => [
'label' => 'mydatetime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'dbType' => 'datetime',
'eval' => 'datetime,null',
// 'readOnly' => true, // Bug 2
],
],
// Bug 3
'mytime' => [
'label' => 'mytime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'dbType' => 'time',
'eval' => 'time,null',
],
],
],
'types' => [
'0' => ['showitem' => 'mydatetime,mytime'],
],
];
SQL:
mydatetime datetime default NULL,
mytime time default NULL,
Source of the problem¶
- the conversion in DatabaseRowDateTimeFields:47
Classes using this value (as far as I know)¶
- Bug 1: TcaRecordTitle:320,360
- Example dataflow
- Database:
2022-02-22 12:00
- DatabaseRowDateTimeFields: generates a string like
2022-02-22T07:00:00-05:00
(UTC) - TcaRecordTitle: converted to a timestamp by
strtotime
to1645531200
- TcaRecordTitle: converted by
BackendUtility::datetime
(with date function, formats in server timezone) to2022-02-22 07:00
- Database:
- Example dataflow
- Bug 2: InputDateTimeElement:114
- Bug 3: TcaRecordTitle???#
- Custom functions using
formattedLabel_userFunc
Files
Updated by Imko Schumacher almost 3 years ago
Some hints for possible solutions:
Option A¶
Remove the first part of the if clause or even the whole file (DatabaseRowDateTimeFields
):
- Needs adjustments inside
InputDateTimeElement
- Matches "assumptions" inside TcaRecordTitleTest (
2014-12-31 23:59:59
) better - check other places
- ...
Option B (simple, but not lasting)¶
Remove the in DatabaseRowDateTimeFields:47 . ' UTC'
$result['databaseRow'][$column] = date('c', (int)strtotime($result['databaseRow'][$column]));
Problems:
- Does not fix bug 3
- This and the current solution does not match expectations in the core
Updated by Imko Schumacher 12 months ago
- TYPO3 Version changed from 11 to 13
Bugs are still present in TYPO3 v13 (tested with 9e1e9493ff5e0b615e4921b2612226c684759d3f
).
Updated TCA;
return [
'ctrl' => [
'title' => 'DateTime title error',
'label' => 'mydatetime', // Bug 1 and 2
// 'label' => 'mytime', // Bug 3
],
'columns' => [
// Bug 1 and 2
'mydatetime' => [
'label' => 'mydatetime',
'config' => [
'type' => 'datetime',
'format' => 'datetime',
'dbType' => 'datetime',
'nullable' => true,
// 'readOnly' => true, // Bug 2
],
],
// Bug 3
'mytime' => [
'label' => 'mytime',
'config' => [
'type' => 'datetime',
'format' => 'time',
'dbType' => 'time',
'nullable' => true,
],
],
],
'types' => [
'0' => ['showitem' => 'mydatetime,mytime'],
],
];
Updated by Markus Klein 5 months ago
- Related to Feature #61110: Support for timezones in all date fields in TYPO3 BE added
Updated by Benjamin Franzke 3 days ago
- Related to Task #105643: Transform all dates in DatabaseRowDateTimeFields to DateTime added
Updated by Gerrit Code Review 3 days ago
- Status changed from New to Under Review
Patch set 3 for branch main of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/86925
Updated by Gerrit Code Review 3 days ago
Patch set 4 for branch main of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/86925
Updated by Gerrit Code Review 3 days ago
Patch set 5 for branch main of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/86925
Updated by Gerrit Code Review 3 days ago
Patch set 6 for branch main of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/86925
Updated by Gerrit Code Review 2 days ago
Patch set 7 for branch main of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/86925