98 if (is_array($source)) {
101 if (is_int($source)) {
104 return is_string($source);
121 if (is_string($source)) {
122 $dateAsString = $source;
123 } elseif (is_int($source)) {
124 $dateAsString = strval($source);
126 if (isset($source[
'date']) && is_string($source[
'date'])) {
127 $dateAsString = $source[
'date'];
128 } elseif (isset($source[
'date']) && is_int($source[
'date'])) {
129 $dateAsString = strval($source[
'date']);
131 if ($source[
'day'] < 1 || $source[
'month'] < 1 || $source[
'year'] < 1) {
132 return new \TYPO3\CMS\Extbase\Error\Error(
'Could not convert the given date parts into a DateTime object because one or more parts were 0.', 1333032779);
134 $dateAsString = sprintf(
'%d-%d-%d', $source[
'year'], $source[
'month'], $source[
'day']);
136 throw new \TYPO3\CMS\Extbase\Property\Exception\TypeConverterException(
'Could not convert the given source into a DateTime object because it was not an array with a valid date as a string', 1308003914);
138 if (isset($source[
'dateFormat']) && $source[
'dateFormat'] !==
'') {
139 $dateFormat = $source[
'dateFormat'];
142 if ($dateAsString ===
'') {
145 if (ctype_digit($dateAsString) && $configuration ===
null && (!is_array($source) || !isset($source[
'dateFormat']))) {
148 if (is_array($source) && isset($source[
'timezone']) && (
string)$source[
'timezone'] !==
'') {
150 $timezone = new \DateTimeZone($source[
'timezone']);
151 }
catch (\Exception $e) {
152 throw new \TYPO3\CMS\Extbase\Property\Exception\TypeConverterException(
'The specified timezone "' . $source[
'timezone'] .
'" is invalid.', 1308240974);
154 $date = $targetType::createFromFormat($dateFormat, $dateAsString, $timezone);
156 $date = $targetType::createFromFormat($dateFormat, $dateAsString);
158 if ($date ===
false) {
159 return new \TYPO3\CMS\Extbase\Validation\Error(
'The date "%s" was not recognized (for format "%s").', 1307719788, [$dateAsString, $dateFormat]);
161 if (is_array($source)) {
175 return isset($source[
'day']) && ctype_digit($source[
'day'])
176 && isset($source[
'month']) && ctype_digit($source[
'month'])
177 && isset($source[
'year']) && ctype_digit($source[
'year']);
190 if ($configuration ===
null) {
193 $dateFormat = $configuration->getConfigurationValue(DateTimeConverter::class, self::CONFIGURATION_DATE_FORMAT);
194 if ($dateFormat ===
null) {
197 if ($dateFormat !==
null && !is_string($dateFormat)) {
198 throw new \TYPO3\CMS\Extbase\Property\Exception\InvalidPropertyMappingConfigurationException(
'CONFIGURATION_DATE_FORMAT must be of type string, "' . (is_object($dateFormat) ? get_class($dateFormat) : gettype($dateFormat)) .
'" given', 1307719569);
212 if (!isset($source[
'hour']) && !isset($source[
'minute']) && !isset($source[
'second'])) {
215 $hour = isset($source[
'hour']) ? (int)$source[
'hour'] : 0;
216 $minute = isset($source[
'minute']) ? (int)$source[
'minute'] : 0;
217 $second = isset($source[
'second']) ? (int)$source[
'second'] : 0;
218 return $date->setTime($hour, $minute, $second);