DateType.php 1.46 KB
Newer Older
1 2 3 4
<?php

namespace Doctrine\DBAL\Types;

5 6
use DateTime;
use DateTimeInterface;
7 8
use Doctrine\DBAL\Platforms\AbstractPlatform;

9
/**
10
 * Type that maps an SQL DATE to a PHP Date object.
11 12 13
 */
class DateType extends Type
{
Benjamin Morel's avatar
Benjamin Morel committed
14 15 16
    /**
     * {@inheritdoc}
     */
17 18
    public function getName()
    {
19
        return Types::DATE_MUTABLE;
20 21
    }

Benjamin Morel's avatar
Benjamin Morel committed
22 23 24
    /**
     * {@inheritdoc}
     */
25
    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
26
    {
27
        return $platform->getDateTypeDeclarationSQL($fieldDeclaration);
28 29
    }

Benjamin Morel's avatar
Benjamin Morel committed
30 31 32
    /**
     * {@inheritdoc}
     */
33
    public function convertToDatabaseValue($value, AbstractPlatform $platform)
34
    {
35
        if ($value === null) {
36 37 38
            return $value;
        }

39
        if ($value instanceof DateTimeInterface) {
40
            return $value->format($platform->getDateFormatString());
41 42
        }

43
        throw ConversionException::conversionFailedInvalidType($value, $this->getName(), ['null', 'DateTime']);
44
    }
45

Benjamin Morel's avatar
Benjamin Morel committed
46 47 48
    /**
     * {@inheritdoc}
     */
49
    public function convertToPHPValue($value, AbstractPlatform $platform)
50
    {
51
        if ($value === null || $value instanceof DateTimeInterface) {
52
            return $value;
53 54
        }

55
        $val = DateTime::createFromFormat('!' . $platform->getDateFormatString(), $value);
56
        if ($val === false) {
57
            throw ConversionException::conversionFailedFormat($value, $this->getName(), $platform->getDateFormatString());
58
        }
Benjamin Morel's avatar
Benjamin Morel committed
59

60
        return $val;
61
    }
62
}