Passed
Push — master ( ae50da...6b4bb5 )
by Robin
10:49
created

Helpers::dateToCarbon()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 16
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 4

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 16
ccs 8
cts 8
cp 1
rs 9.2
cc 4
eloc 8
nc 4
nop 1
crap 4
1
<?php
2
3
namespace Klever\JustGivingApiSdk\Support;
4
5
use Carbon\Carbon;
6
use DateTime;
7
8
class Helpers
9
{
10
    /**
11
     * Return a Carbon instance from a string or DateTime instance.
12
     *
13
     * @param string|DateTime|Carbon $date
14
     * @return Carbon
15
     */
16 5
    public static function dateToCarbon($date)
17
    {
18 5
        if ($date instanceof Carbon) {
19 1
            return $date;
20
        }
21
22 4
        if (is_string($date)) {
23 2
            return static::dateFromString($date);
24
        }
25
26 2
        if ($date instanceof DateTime) {
27 1
            return Carbon::parse($date->format('r'));
28
        }
29
30 1
        return null;
31
    }
32
33
    /**
34
     * Create a Carbon instance from a string. Can be in '/Date(1365004652303-0500)/' format or any other standard format that Carbon will parse.
35
     *
36
     * @param string $date
37
     * @return Carbon
38
     */
39 2
    protected static function dateFromString($date)
40
    {
41 2
        preg_match('/(\d{10})(\d{3})([\+\-]\d{4})/', $date, $matches);
42
43 2
        if (count($matches) == 4) {
44 1
            return Carbon::createFromFormat("U.u.O", vsprintf('%2$s.%3$s.%4$s', $matches));
45
        }
46
47 1
        return Carbon::parse($date);
48
    }
49
}
50