Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5987753
DateCaster.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
DateCaster.php
View Options
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace
Symfony\Component\VarDumper\Caster
;
use
Symfony\Component\VarDumper\Cloner\Stub
;
/**
* Casts DateTimeInterface related classes to array representation.
*
* @author Dany Maillard <danymaillard93b@gmail.com>
*
* @final
*/
class
DateCaster
{
private
const
PERIOD_LIMIT
=
3
;
public
static
function
castDateTime
(
\DateTimeInterface
$d
,
array
$a
,
Stub
$stub
,
bool
$isNested
,
int
$filter
):
array
{
$prefix
=
Caster
::
PREFIX_VIRTUAL
;
$location
=
$d
->
getTimezone
()
?
$d
->
getTimezone
()->
getLocation
()
:
null
;
$fromNow
=
(
new
\DateTimeImmutable
())->
diff
(
$d
);
$title
=
$d
->
format
(
'l, F j, Y'
)
.
"
\n
"
.
self
::
formatInterval
(
$fromNow
).
' from now'
.(
$location
?
(
$d
->
format
(
'I'
)
?
"
\n
DST On"
:
"
\n
DST Off"
)
:
''
)
;
unset
(
$a
[
Caster
::
PREFIX_DYNAMIC
.
'date'
],
$a
[
Caster
::
PREFIX_DYNAMIC
.
'timezone'
],
$a
[
Caster
::
PREFIX_DYNAMIC
.
'timezone_type'
]
);
$a
[
$prefix
.
'date'
]
=
new
ConstStub
(
self
::
formatDateTime
(
$d
,
$location
?
' e (P)'
:
' P'
),
$title
);
$stub
->
class
.=
$d
->
format
(
' @U'
);
return
$a
;
}
public
static
function
castInterval
(
\DateInterval
$interval
,
array
$a
,
Stub
$stub
,
bool
$isNested
,
int
$filter
):
array
{
$now
=
new
\DateTimeImmutable
(
'@0'
,
new
\DateTimeZone
(
'UTC'
));
$numberOfSeconds
=
$now
->
add
(
$interval
)->
getTimestamp
()
-
$now
->
getTimestamp
();
$title
=
number_format
(
$numberOfSeconds
,
0
,
'.'
,
' '
).
's'
;
$i
=
[
Caster
::
PREFIX_VIRTUAL
.
'interval'
=>
new
ConstStub
(
self
::
formatInterval
(
$interval
),
$title
)];
return
$filter
&
Caster
::
EXCLUDE_VERBOSE
?
$i
:
$i
+
$a
;
}
private
static
function
formatInterval
(
\DateInterval
$i
):
string
{
$format
=
'%R '
;
if
(
0
===
$i
->
y
&&
0
===
$i
->
m
&&
(
$i
->
h
>=
24
||
$i
->
i
>=
60
||
$i
->
s
>=
60
))
{
$d
=
new
\DateTimeImmutable
(
'@0'
,
new
\DateTimeZone
(
'UTC'
));
$i
=
$d
->
diff
(
$d
->
add
(
$i
));
// recalculate carry over points
$format
.=
0
<
$i
->
days
?
'%ad '
:
''
;
}
else
{
$format
.=
(
$i
->
y
?
'%yy '
:
''
).(
$i
->
m
?
'%mm '
:
''
).(
$i
->
d
?
'%dd '
:
''
);
}
$format
.=
$i
->
h
||
$i
->
i
||
$i
->
s
||
$i
->
f
?
'%H:%I:'
.
self
::
formatSeconds
(
$i
->
s
,
substr
(
$i
->
f
,
2
))
:
''
;
$format
=
'%R '
===
$format
?
'0s'
:
$format
;
return
$i
->
format
(
rtrim
(
$format
));
}
public
static
function
castTimeZone
(
\DateTimeZone
$timeZone
,
array
$a
,
Stub
$stub
,
bool
$isNested
,
int
$filter
):
array
{
$location
=
$timeZone
->
getLocation
();
$formatted
=
(
new
\DateTimeImmutable
(
'now'
,
$timeZone
))->
format
(
$location
?
'e (P)'
:
'P'
);
$title
=
$location
&&
\extension_loaded
(
'intl'
)
?
\Locale
::
getDisplayRegion
(
'-'
.
$location
[
'country_code'
])
:
''
;
$z
=
[
Caster
::
PREFIX_VIRTUAL
.
'timezone'
=>
new
ConstStub
(
$formatted
,
$title
)];
return
$filter
&
Caster
::
EXCLUDE_VERBOSE
?
$z
:
$z
+
$a
;
}
public
static
function
castPeriod
(
\DatePeriod
$p
,
array
$a
,
Stub
$stub
,
bool
$isNested
,
int
$filter
):
array
{
$dates
=
[];
foreach
(
clone
$p
as
$i
=>
$d
)
{
if
(
self
::
PERIOD_LIMIT
===
$i
)
{
$now
=
new
\DateTimeImmutable
(
'now'
,
new
\DateTimeZone
(
'UTC'
));
$dates
[]
=
\sprintf
(
'%s more'
,
(
$end
=
$p
->
getEndDate
())
?
ceil
((
$end
->
format
(
'U.u'
)
-
$d
->
format
(
'U.u'
))
/
((
int
)
$now
->
add
(
$p
->
getDateInterval
())->
format
(
'U.u'
)
-
(
int
)
$now
->
format
(
'U.u'
)))
:
$p
->
recurrences
-
$i
);
break
;
}
$dates
[]
=
\sprintf
(
'%s) %s'
,
$i
+
1
,
self
::
formatDateTime
(
$d
));
}
$period
=
\sprintf
(
'every %s, from %s%s %s'
,
self
::
formatInterval
(
$p
->
getDateInterval
()),
$p
->
include_start_date
?
'['
:
']'
,
self
::
formatDateTime
(
$p
->
getStartDate
()),
(
$end
=
$p
->
getEndDate
())
?
'to '
.
self
::
formatDateTime
(
$end
).(
$p
->
include_end_date
?
']'
:
'['
)
:
'recurring '
.
$p
->
recurrences
.
' time/s'
);
$p
=
[
Caster
::
PREFIX_VIRTUAL
.
'period'
=>
new
ConstStub
(
$period
,
implode
(
"
\n
"
,
$dates
))];
return
$filter
&
Caster
::
EXCLUDE_VERBOSE
?
$p
:
$p
+
$a
;
}
private
static
function
formatDateTime
(
\DateTimeInterface
$d
,
string
$extra
=
''
):
string
{
return
$d
->
format
(
'Y-m-d H:i:'
.
self
::
formatSeconds
(
$d
->
format
(
's'
),
$d
->
format
(
'u'
)).
$extra
);
}
private
static
function
formatSeconds
(
string
$s
,
string
$us
):
string
{
return
\sprintf
(
'%02d.%s'
,
$s
,
0
===
(
$len
=
\strlen
(
$t
=
rtrim
(
$us
,
'0'
)))
?
'0'
:
(
$len
<=
3
?
str_pad
(
$t
,
3
,
'0'
)
:
$us
));
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sun, Oct 4, 00:33 (2 w, 6 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
8d/05/7dd6ba87b085a1df14461817392d
Default Alt Text
DateCaster.php (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment