Project

General

Profile

Actions

Bug #79249

closed

Epic #77562: Misbehaviors with datetime values and timezones

TCA fields with eval types "time" or "timesec" are incorrectly stored in the database

Added by Dominique Kreemers almost 8 years ago. Updated about 6 years ago.

Status:
Closed
Priority:
Must have
Assignee:
Category:
DataHandler aka TCEmain
Target version:
Start date:
2017-01-10
Due date:
% Done:

100%

Estimated time:
TYPO3 Version:
8
PHP Version:
7.0
Tags:
Complexity:
Is Regression:
Yes
Sprint Focus:
Stabilization Sprint

Description

As mentioned in the title, TCA fields with eval value "time" or "timesec" are stored incorrectly to the database in TYPO3 8.5.1.
In my setup i will get the value "1484084700" in the database if i select 23:45 for the give field.

The documentation suggests that the value will just hold the seconds from 1970-01-01 00:00:00 to the selected time:

https://docs.typo3.org/typo3cms/TCAReference/Reference/Columns/Input/Index.html#eval

The display will be like "23:45" while the database will be "85500".

In TYPO3 8.4.1 this works as expected. It seems like the changes from #77702 have changed this behaviour.

Following code block is responsible for this issue:
(/typo3/sysext/core/Classes/DataHandling/DataHandler.php @Line #2693)

case 'time':
case 'timesec':
case 'date':
case 'datetime':
    // a hyphen as first character indicates a negative timestamp
    if ((strpos($value, '-') === false && strpos($value, ':') === false) || strpos($value, '-') === 0) {
        $value = (int)$value;
    } else {
        // ISO 8601 dates
        $dateTime = new \DateTime($value);
        // The returned timestamp is always UTC
        $value = $dateTime->getTimestamp();
    }
    // $value is a UTC timestamp here.
    // The value will be stored in the server’s local timezone, but treated as UTC, so we brute force
    // subtract the offset here. The offset is subtracted instead of added because the value is stored
    // in the timezone, but interpreted as UTC, so if we switched the server to UTC, the correct
    // value would be returned.
    if ($value !== 0 && !$this->dontProcessTransformations) {
        $value -= date('Z', $value);
    }
    break;


Related issues 6 (1 open5 closed)

Related to TYPO3 Core - Task #77702: Use moment.js and ISO-8601 dates in the backendClosedAndreas Wolf2016-08-30

Actions
Related to TYPO3 Core - Bug #79557: Date fields DataMapper handling problemNew2017-01-30

Actions
Related to TYPO3 Core - Bug #91838: TCA l10n_mode="exclude" with TCA config dbType='datetime' set wrong timezone in translated recordsClosed2020-07-22

Actions
Has duplicate TYPO3 Core - Bug #79975: TCA -> input -> eval: 'time' not relative timestampClosed2017-02-23

Actions
Has duplicate TYPO3 Core - Bug #79957: TCA fields with eval types "time" or "timesec" decrease on every saveClosed2017-02-22

Actions
Has duplicate TYPO3 Core - Bug #80679: Input field eval datetime in FlexForm converts to wrong timestampClosed2017-04-04

Actions
Actions

Also available in: Atom PDF