Completed
Push — master ( 3206cc...899138 )
by David
24:10 queued 23:01
created

CookieUtil::parseDate()   A

Complexity

Conditions 4
Paths 5

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 4.5923

Importance

Changes 0
Metric Value
dl 0
loc 18
ccs 6
cts 9
cp 0.6667
rs 9.6666
c 0
b 0
f 0
cc 4
nc 5
nop 1
crap 4.5923
1
<?php
2
3
namespace Http\Message;
4
5
use Http\Message\Exception\UnexpectedValueException;
6
7
final class CookieUtil
8
{
9
    /**
10
     * Handles dates as defined by RFC 2616 section 3.3.1, and also some other
11
     * non-standard, but common formats.
12
     *
13
     * @var array
14
     */
15
    private static $dateFormats = [
16
        'D, d M y H:i:s T',
17
        'D, d M Y H:i:s T',
18
        'D, d-M-y H:i:s T',
19
        'D, d-M-Y H:i:s T',
20
        'D, d-m-y H:i:s T',
21
        'D, d-m-Y H:i:s T',
22
        'D M j G:i:s Y',
23
        'D M d H:i:s Y T',
24
    ];
25
26
    /**
27
     * @see https://github.com/symfony/symfony/blob/master/src/Symfony/Component/BrowserKit/Cookie.php
28
     *
29
     * @param string $dateValue
30
     *
31
     * @return \DateTime
32
     *
33
     * @throws UnexpectedValueException if we cannot parse the cookie date string.
34
     */
35 24
    public static function parseDate($dateValue)
36
    {
37 24
        foreach (self::$dateFormats as $dateFormat) {
38 24
            if (false !== $date = \DateTime::createFromFormat($dateFormat, $dateValue, new \DateTimeZone('GMT'))) {
39 24
                return $date;
40
            }
41
        }
42
43
        // attempt a fallback for unusual formatting
44 11
        if (false !== $date = date_create($dateValue, new \DateTimeZone('GMT'))) {
45 11
            return $date;
46
        }
47
48
        throw new UnexpectedValueException(sprintf(
49
            'Unparseable cookie date string "%s"',
50
            $dateValue
51
        ));
52
    }
53
}
54