blob: 65d8033af4e67bd92deb239da6608f97273d6998 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<?php
namespace ipl\Orm\Behavior;
use DateTime;
use DateTimeZone;
use Exception;
use ipl\Orm\Contract\PropertyBehavior;
use ipl\Orm\Exception\ValueConversionException;
class MillisecondTimestamp extends PropertyBehavior
{
public function fromDb($value, $key, $context)
{
if ($value === null) {
return null;
}
$datetime = DateTime::createFromFormat('U.u', sprintf('%F', $value / 1000.0));
$datetime->setTimezone(new DateTimeZone(date_default_timezone_get()));
return $datetime;
}
public function toDb($value, $key, $context)
{
if (is_numeric($value)) {
return (int) ($value * 1000.0);
}
if (! $value instanceof DateTime) {
try {
$value = new DateTime($value);
} catch (Exception $err) {
throw new ValueConversionException(sprintf('Invalid date time format provided: %s', $value));
}
}
return (int) ($value->format('U.u') * 1000.0);
}
}
|