Issues (3)

src/Date.php (1 issue)

1
<?php
2
3
declare(strict_types = 1);
4
5
/*
6
 * Copyright (c) DateTime-Contributors
7
 *
8
 * Licensed under the MIT License. See LICENSE.md file in the project root
9
 * for full license information.
10
 */
11
12
namespace DateTime;
13
14
use DateTime\Exception\NotYetImplemented;
15
use DateTimeImmutable;
16
use DateTimeInterface;
17
use DateTimeZone;
18
19
class Date
20
{
21
    private $datetime;
22
23
    /**
24
     * Date constructor.
25
     *
26
     * @param string $date A date-string in an ISO-format.
27
     *
28
     * @throws \Exception
29
     */
30
    public function __construct(string $date)
31
    {
32
        $tempDate = new DateTimeImmutable($date);
33
        $this->datetime = new DateTimeImmutable(
34
            $tempDate->format('Y-m-d') . 'T12:00:00.0',
35
            new DateTimeZone('UTC')
36
        );
37
        $this->datetime = $this->datetime->setTime(
38
            12,
39
            00,
40
            00,
41
            0
42
        );
43
    }
44
45
    public function format(string $format) : string
46
    {
47
        $format = $this->sanitizeFormatString($format);
48
49
        return $this->datetime->format($format);
50
    }
51
52
    public function add(DateInterval $interval) : Date
53
    {
54
        $self = clone($this);
55
        $self->datetime = $this->datetime->add($interval->getDateTimeInterval());
56
57
        return $self;
58
    }
59
60
    public function sub(DateInterval $interval) : Date
61
    {
62
        $self = clone($this);
63
        $self->datetime = $this->datetime->sub($interval->getDateTimeInterval());
64
65
        return $self;
66
    }
67
68
    public function modify(string $modification) : Date
69
    {
70
        throw new NotYetImplemented('"modify" is not yet implemented');
71
        // TODO Remove all time-information from modification-string
72
        $self = clone($this);
0 ignored issues
show
$self = clone $this is not reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
73
        $self->datetime = $this->datetime->modify($modification);
74
75
        return $self;
76
    }
77
78
    public function diff(Date $date) : DateInterval
79
    {
80
        return DateInterval::fromDateTimeInterval(
81
            $this->datetime->diff($date->datetime)
82
        );
83
    }
84
85
    public static function fromDateTimeInterface(DateTimeInterface $datetime)
86
    {
87
        return new self($datetime->format('Y-m-d'));
88
    }
89
90
    public function getYear() : int
91
    {
92
        return (int) $this->datetime->format('Y');
93
    }
94
95
    public function getMonth() : int
96
    {
97
        return (int) $this->datetime->format('n');
98
    }
99
100
    public function getDay() : int
101
    {
102
        return (int) $this->datetime->format('j');
103
    }
104
105
    private function sanitizeFormatString(string $format) : string
106
    {
107
        return preg_replace('/(?<!\\\\)([aABgGhHisuveIOPTZcrU])/', '\\\\$1', $format);
108
    }
109
}
110