Skip to content

Commit 04d26bb

Browse files
committed
Added converter methods
1 parent 08475b3 commit 04d26bb

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

src/Timezone.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Whitecube\LaravelTimezones;
44

55
use Carbon\CarbonTimeZone;
6+
use Carbon\CarbonInterface;
67

78
class Timezone
89
{
@@ -65,6 +66,16 @@ public function getStorage(): CarbonTimeZone
6566
return $this->storage;
6667
}
6768

69+
public function convertToCurrent(CarbonInterface $date): CarbonInterface
70+
{
71+
return $date->copy()->setTimezone($this->getCurrent());
72+
}
73+
74+
public function convertToStorage(CarbonInterface $date): CarbonInterface
75+
{
76+
return $date->copy()->setTimezone($this->getStorage());
77+
}
78+
6879
protected function makeTimezone($value): CarbonTimeZone
6980
{
7081
if(! is_a($value, CarbonTimeZone::class)) {

tests/TimezoneSingletonTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?php
22

3+
use Carbon\Carbon;
34
use Carbon\CarbonTimeZone;
45
use Whitecube\LaravelTimezones\Timezone;
56

@@ -9,3 +10,25 @@
910
expect($instance->getCurrent())->toBeInstanceOf(CarbonTimeZone::class);
1011
expect($instance->getStorage())->toBeInstanceOf(CarbonTimeZone::class);
1112
});
13+
14+
it('can convert date with defined timezone to current & storage timezones', function() {
15+
$instance = new Timezone('UTC');
16+
$instance->setCurrent('Europe/Brussels');
17+
18+
$date = new Carbon(null, 'Asia/Phnom_Penh');
19+
20+
expect($instance->convertToStorage($date)->getTimezone()->getName() ?? null)->toBe('UTC');
21+
expect($instance->convertToCurrent($date)->getTimezone()->getName() ?? null)->toBe('Europe/Brussels');
22+
expect($date->getTimezone()->getName() ?? null)->toBe('Asia/Phnom_Penh');
23+
});
24+
25+
it('can convert date with unset timezone to current & storage timezones', function() {
26+
$instance = new Timezone('UTC');
27+
$instance->setCurrent('Europe/Brussels');
28+
29+
$date = new Carbon();
30+
31+
expect($instance->convertToStorage($date)->getTimezone()->getName() ?? null)->toBe('UTC');
32+
expect($instance->convertToCurrent($date)->getTimezone()->getName() ?? null)->toBe('Europe/Brussels');
33+
expect($date->getTimezone()->getName() ?? null)->toBe(date_default_timezone_get());
34+
});

0 commit comments

Comments
 (0)