Skip to content

Commit 5918c66

Browse files
committed
Create a Clock class based on AbsoluteDate
1 parent f4ccde6 commit 5918c66

3 files changed

Lines changed: 61 additions & 1 deletion

File tree

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"assoconnect/php-date": "^2.11",
2727
"doctrine/dbal": "^2.10|^3.0",
2828
"symfony/serializer": "^6.0|^7.0",
29-
"twig/twig": "^3"
29+
"twig/twig": "^3",
30+
"symfony/clock": "^7.3"
3031
},
3132
"config": {
3233
"allow-plugins": {

src/AbsoluteDateClock.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace AssoConnect\PHPDateBundle;
6+
7+
use AssoConnect\PHPDate\AbsoluteDate;
8+
use Symfony\Component\Clock\DatePoint;
9+
10+
class AbsoluteDateClock
11+
{
12+
public static function now(\DateTimeZone $timeZone): AbsoluteDate
13+
{
14+
return self::relative('now', $timeZone);
15+
}
16+
17+
/**
18+
* @throws \DateMalformedStringException
19+
*/
20+
public static function relative(string $relative = 'now', \DateTimeZone $timezone = null): AbsoluteDate
21+
{
22+
return AbsoluteDate::createInTimezone($timezone ?? new \DateTimeZone('UTC'), new DatePoint($relative));
23+
}
24+
}

tests/AbsoluteDateClockTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace AssoConnect\PHPDateBundle\Tests;
6+
7+
use AssoConnect\PHPDateBundle\AbsoluteDateClock;
8+
use PHPUnit\Framework\TestCase;
9+
use Symfony\Component\Clock\Test\ClockSensitiveTrait;
10+
11+
class AbsoluteDateClockTest extends TestCase
12+
{
13+
use ClockSensitiveTrait;
14+
15+
protected function setUp(): void
16+
{
17+
self::mockTime('2025-03-12 10:11:12');
18+
}
19+
20+
public function testNow(): void
21+
{
22+
self::assertEquals(
23+
'2025-03-12',
24+
AbsoluteDateClock::now(new \DateTimeZone('Europe/Paris'))
25+
);
26+
}
27+
28+
public function testRelative(): void
29+
{
30+
self::assertEquals(
31+
'2025-03-11',
32+
AbsoluteDateClock::relative('-1day', new \DateTimeZone('Europe/Paris'))
33+
);
34+
}
35+
}

0 commit comments

Comments
 (0)