Completed
Pull Request — master (#76)
by adev
03:54
created

CookieUtil::parseDate()   A

Complexity

Conditions 4
Paths 5

Size

Total Lines 18
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 4.432

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 18
ccs 7
cts 10
cp 0.7
rs 9.2
cc 4
eloc 9
nc 5
nop 1
crap 4.432
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 13
                return $date;
40
            }
41 22
        }
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