diff --git a/typo3/sysext/core/Classes/DataHandling/DataHandler.php b/typo3/sysext/core/Classes/DataHandling/DataHandler.php index 3ae0c18..74d5bb4 100644 --- a/typo3/sysext/core/Classes/DataHandling/DataHandler.php +++ b/typo3/sysext/core/Classes/DataHandling/DataHandler.php @@ -2735,18 +2735,32 @@ 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); + switch ($func) { + case 'time': + $valueArr = explode(':', $value); + $value = $valueArr[0] * 3600 + $valueArr[1] * 60; + break; + case 'timesec': + $valueArr = explode(':', $value); + $value = $valueArr[0] * 3600 + $valueArr[1] * 60 + $valueArr[2]; + break; + case 'date': + case 'datetime': + // 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; + } } break; case 'double2':