1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
require __DIR__ . '/../../vendor/autoload.php'; |
4
|
|
|
|
5
|
|
|
use Lneicelis\Transformer\Contract\CanTransform; |
6
|
|
|
use Lneicelis\Transformer\Contract\HasTimezone; |
7
|
|
|
use Lneicelis\Transformer\Pipe\TimezonePipe; |
8
|
|
|
use Lneicelis\Transformer\Pipe\TransformPipe; |
9
|
|
|
use Lneicelis\Transformer\Transformer; |
10
|
|
|
use Lneicelis\Transformer\TransformerRegistry; |
11
|
|
|
use Lneicelis\Transformer\ValueObject\Context; |
12
|
|
|
|
13
|
|
|
class DateTimeTransformer implements CanTransform |
14
|
|
|
{ |
15
|
|
|
public function getResourceClass(): string |
16
|
|
|
{ |
17
|
|
|
return DateTime::class; |
18
|
|
|
} |
19
|
|
|
|
20
|
|
|
/** |
21
|
|
|
* @param DateTime $resource |
22
|
|
|
* @return string |
23
|
|
|
*/ |
24
|
|
|
public function transform($resource): string |
25
|
|
|
{ |
26
|
|
|
return $resource->format('Y-m-d H:i:s'); |
27
|
|
|
} |
28
|
|
|
} |
29
|
|
|
|
30
|
|
|
class TimezoneAwareContext extends Context implements HasTimezone |
31
|
|
|
{ |
32
|
|
|
/** @var DateTimeZone */ |
33
|
|
|
private $timezone; |
34
|
|
|
|
35
|
|
|
public function __construct(DateTimeZone $timezone) |
36
|
|
|
{ |
37
|
|
|
parent::__construct(); |
38
|
|
|
$this->timezone = $timezone; |
39
|
|
|
} |
40
|
|
|
|
41
|
|
|
public function getTimezone(): DateTimeZone |
42
|
|
|
{ |
43
|
|
|
return $this->timezone; |
44
|
|
|
} |
45
|
|
|
} |
46
|
|
|
|
47
|
|
|
$transformerRepository = new TransformerRegistry(); |
48
|
|
|
$transformer = new Transformer([ |
49
|
|
|
new TimezonePipe(), |
50
|
|
|
new TransformPipe($transformerRepository), |
51
|
|
|
]); |
52
|
|
|
|
53
|
|
|
$dateTimeTransformer = new DateTimeTransformer(); |
54
|
|
|
$transformerRepository->addTransformer($dateTimeTransformer); |
55
|
|
|
|
56
|
|
|
$resource = new DateTime('2000-10-10 12:00:00', new DateTimeZone('-0400')); |
57
|
|
|
|
58
|
|
|
var_dump($dateTimeTransformer->transform($resource)); |
59
|
|
|
|
60
|
|
|
$context = new TimezoneAwareContext(new DateTimeZone('+0000')); |
61
|
|
|
var_dump($transformer->transform($resource, $context)); |