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

CookieUtil   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 66.67%

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 1
dl 0
loc 47
ccs 6
cts 9
cp 0.6667
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A parseDate() 0 18 4
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