101 if (!is_callable(array(
$targetType,
'createFromFormat'))) {
104 if (is_array($source)) {
107 if (is_integer($source)) {
110 return is_string($source);
125 if (is_string($source)) {
126 $dateAsString = $source;
127 } elseif (is_integer($source)) {
128 $dateAsString = strval($source);
130 if (isset($source[
'date']) && is_string($source[
'date'])) {
131 $dateAsString = $source[
'date'];
132 } elseif (isset($source[
'date']) && is_integer($source[
'date'])) {
133 $dateAsString = strval($source[
'date']);
135 if ($source[
'day'] < 1 || $source[
'month'] < 1 || $source[
'year'] < 1) {
136 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);
138 $dateAsString = sprintf(
'%d-%d-%d', $source[
'year'], $source[
'month'], $source[
'day']);
140 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);
142 if (isset($source[
'dateFormat']) && strlen($source[
'dateFormat']) > 0) {
143 $dateFormat = $source[
'dateFormat'];
146 if ($dateAsString ===
'') {
149 if (ctype_digit($dateAsString) && $configuration === NULL && (!is_array($source) || !isset($source[
'dateFormat']))) {
152 if (is_array($source) && isset($source[
'timezone']) && strlen($source[
'timezone']) !== 0) {
154 $timezone = new \DateTimeZone($source[
'timezone']);
156 throw new \TYPO3\CMS\Extbase\Property\Exception\TypeConverterException(
'The specified timezone "' . $source[
'timezone'] .
'" is invalid.', 1308240974);
158 $date = $targetType::createFromFormat($dateFormat, $dateAsString, $timezone);
160 $date = $targetType::createFromFormat($dateFormat, $dateAsString);
162 if ($date === FALSE) {
163 return new \TYPO3\CMS\Extbase\Validation\Error(
'The date "%s" was not recognized (for format "%s").', 1307719788, array($dateAsString, $dateFormat));
165 if (is_array($source)) {
178 return isset($source[
'day']) && ctype_digit($source[
'day'])
179 && isset($source[
'month']) && ctype_digit($source[
'month'])
180 && isset($source[
'year']) && ctype_digit($source[
'year']);
192 if ($configuration === NULL) {
193 return self::DEFAULT_DATE_FORMAT;
195 $dateFormat = $configuration->getConfigurationValue(
'TYPO3\\CMS\\Extbase\\Property\\TypeConverter\\DateTimeConverter', self::CONFIGURATION_DATE_FORMAT);
196 if ($dateFormat === NULL) {
197 return self::DEFAULT_DATE_FORMAT;
198 } elseif ($dateFormat !== NULL && !is_string($dateFormat)) {
199 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 $date->setTime($hour, $minute, $second);
convertFrom($source, $targetType, array $convertedChildProperties=array(), \TYPO3\CMS\Extbase\Property\PropertyMappingConfigurationInterface $configuration=NULL)
canConvertFrom($source, $targetType)
const CONFIGURATION_DATE_FORMAT
const DEFAULT_DATE_FORMAT
getDefaultDateFormat(\TYPO3\CMS\Extbase\Property\PropertyMappingConfigurationInterface $configuration=NULL)
overrideTimeIfSpecified(\DateTime $date, array $source)
isDatePartKeysProvided(array $source)