|
5 | 5 | namespace AssoConnect\PHPDate; |
6 | 6 |
|
7 | 7 | use AssoConnect\PHPDate\Exception\ParsingException; |
| 8 | +use DateTimeImmutable; |
| 9 | +use DateTimeZone; |
8 | 10 |
|
9 | 11 | class AbsoluteDate implements \Stringable |
10 | 12 | { |
11 | 13 | public const DEFAULT_DATE_FORMAT = 'Y-m-d'; |
12 | 14 |
|
13 | | - private \DateTimeImmutable $datetime; |
| 15 | + private DateTimeImmutable $datetime; |
14 | 16 |
|
15 | 17 | /** |
16 | 18 | * AbsoluteDate constructor from a date as string |
@@ -78,22 +80,22 @@ public function modify(string $modifier): self |
78 | 80 | /** |
79 | 81 | * Return the DateTime for a given DateTimeZone |
80 | 82 | */ |
81 | | - public function startsAt(\DateTimeZone $timezone): \DateTimeImmutable |
| 83 | + public function startsAt(DateTimeZone $timezone): DateTimeImmutable |
82 | 84 | { |
83 | 85 | return $this->getDateTimeFromFormatAndTimezone(self::DEFAULT_DATE_FORMAT, $timezone); |
84 | 86 | } |
85 | 87 |
|
86 | 88 | /** |
87 | 89 | * Return the DateTime at the end of the day for a given DateTimeZone |
88 | 90 | */ |
89 | | - public function endsAt(\DateTimeZone $timezone): \DateTimeImmutable |
| 91 | + public function endsAt(DateTimeZone $timezone): DateTimeImmutable |
90 | 92 | { |
91 | 93 | return $this->getDateTimeFromFormatAndTimezone(self::DEFAULT_DATE_FORMAT . ' 23:59:59', $timezone); |
92 | 94 | } |
93 | 95 |
|
94 | | - private function getDateTimeFromFormatAndTimezone(string $format, \DateTimeZone $timezone): \DateTimeImmutable |
| 96 | + private function getDateTimeFromFormatAndTimezone(string $format, DateTimeZone $timezone): DateTimeImmutable |
95 | 97 | { |
96 | | - return new \DateTimeImmutable($this->format($format), $timezone); |
| 98 | + return new DateTimeImmutable($this->format($format), $timezone); |
97 | 99 | } |
98 | 100 |
|
99 | 101 | /** |
@@ -174,42 +176,43 @@ public function __toString(): string |
174 | 176 | /** |
175 | 177 | * Returns an AbsoluteDate instance |
176 | 178 | * |
177 | | - * @param \DateTimeZone $timezone Timezone to use to get the right date |
| 179 | + * @param DateTimeZone $timezone Timezone to use to get the right date |
178 | 180 | * @param \DateTimeInterface|null $datetime Point in time to find the date from |
179 | 181 | * @throws \Exception |
180 | 182 | */ |
181 | | - public static function createInTimezone(\DateTimeZone $timezone, \DateTimeInterface $datetime = null): self |
| 183 | + public static function createInTimezone(DateTimeZone $timezone, \DateTimeInterface $datetime = null): self |
182 | 184 | { |
183 | | - $datetime = new \DateTime('@' . (null === $datetime ? time() : $datetime->getTimestamp())); |
184 | | - $datetime->setTimezone($timezone); |
185 | | - |
186 | | - return new self($datetime->format(self::DEFAULT_DATE_FORMAT)); |
| 185 | + return new self( |
| 186 | + (new DateTimeImmutable('@' . (null === $datetime ? time() : $datetime->getTimestamp()))) |
| 187 | + ->setTimezone($timezone) |
| 188 | + ->format(self::DEFAULT_DATE_FORMAT) |
| 189 | + ); |
187 | 190 | } |
188 | 191 |
|
189 | 192 | /** |
190 | 193 | * Returns an AbsoluteDate instance from a relative format in a given timezone |
191 | 194 | * |
192 | 195 | * @param string $relative Relative format to use |
193 | | - * @param ?\DateTimeZone $timezone Timezone to use to get the right date |
| 196 | + * @param ?DateTimeZone $timezone Timezone to use to get the right date |
194 | 197 | */ |
195 | | - public static function createRelative(string $relative = 'now', \DateTimeZone $timezone = null): self |
| 198 | + public static function createRelative(string $relative = 'now', DateTimeZone $timezone = null): self |
196 | 199 | { |
197 | 200 | if (null === $timezone) { |
198 | | - $timezone = new \DateTimeZone('UTC'); |
| 201 | + $timezone = new DateTimeZone('UTC'); |
199 | 202 | } |
200 | 203 |
|
201 | | - $datetime = new \DateTime($relative, $timezone); |
| 204 | + $datetime = new DateTimeImmutable($relative, $timezone); |
202 | 205 |
|
203 | 206 | return self::createInTimezone($timezone, $datetime); |
204 | 207 | } |
205 | 208 |
|
206 | 209 | private function initDatetime(string $date, string $format): void |
207 | 210 | { |
208 | | - $timezone = new \DateTimeZone('UTC'); |
| 211 | + $timezone = new DateTimeZone('UTC'); |
209 | 212 | $format .= 'H:i:s'; |
210 | 213 | $date .= '00:00:00'; |
211 | 214 |
|
212 | | - $datetime = \DateTimeImmutable::createFromFormat($format, $date, $timezone); |
| 215 | + $datetime = DateTimeImmutable::createFromFormat($format, $date, $timezone); |
213 | 216 |
|
214 | 217 | if (false === $datetime) { |
215 | 218 | throw new ParsingException(sprintf('Cannot parse %s with format %s', $date, $format)); |
|
0 commit comments