Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F97969969
CalendarTimeUtil.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Jan 8, 02:48
Size
2 KB
Mime Type
text/x-php
Expires
Fri, Jan 10, 02:48 (2 d)
Engine
blob
Format
Raw Data
Handle
23467196
Attached To
rPH Phabricator
CalendarTimeUtil.php
View Options
<?php
/**
* This class is useful for generating various time objects, relative to the
* user and their timezone.
*
* For now, the class exposes two sets of static methods for the two main
* calendar views - one for the conpherence calendar widget and one for the
* user profile calendar view. These have slight differences such as
* conpherence showing both a three day "today 'til 2 days from now" *and*
* a Sunday -> Saturday list, whilest the profile view shows a more simple
* seven day rolling list of events.
*/
final
class
CalendarTimeUtil
extends
Phobject
{
public
static
function
getCalendarEventEpochs
(
PhabricatorUser
$user
,
$start_day_str
=
'Sunday'
,
$days
=
9
)
{
$objects
=
self
::
getStartDateTimeObjects
(
$user
,
$start_day_str
);
$start_day
=
$objects
[
'start_day'
];
$end_day
=
clone
$start_day
;
$end_day
->
modify
(
'+'
.
$days
.
' days'
);
return
array
(
'start_epoch'
=>
$start_day
->
format
(
'U'
),
'end_epoch'
=>
$end_day
->
format
(
'U'
),
);
}
public
static
function
getCalendarWeekTimestamps
(
PhabricatorUser
$user
)
{
return
self
::
getTimestamps
(
$user
,
'Today'
,
7
);
}
public
static
function
getCalendarWidgetTimestamps
(
PhabricatorUser
$user
)
{
return
self
::
getTimestamps
(
$user
,
'Sunday'
,
9
);
}
/**
* Public for testing purposes only. You should probably use one of the
* functions above.
*/
public
static
function
getTimestamps
(
PhabricatorUser
$user
,
$start_day_str
,
$days
)
{
$objects
=
self
::
getStartDateTimeObjects
(
$user
,
$start_day_str
);
$start_day
=
$objects
[
'start_day'
];
$timestamps
=
array
();
for
(
$day
=
0
;
$day
<
$days
;
$day
++)
{
$timestamp
=
clone
$start_day
;
$timestamp
->
modify
(
sprintf
(
'+%d days'
,
$day
));
$timestamps
[]
=
$timestamp
;
}
return
array
(
'today'
=>
$objects
[
'today'
],
'epoch_stamps'
=>
$timestamps
,
);
}
private
static
function
getStartDateTimeObjects
(
PhabricatorUser
$user
,
$start_day_str
)
{
$timezone
=
new
DateTimeZone
(
$user
->
getTimezoneIdentifier
());
$today_epoch
=
PhabricatorTime
::
parseLocalTime
(
'today'
,
$user
);
$today
=
new
DateTime
(
'@'
.
$today_epoch
);
$today
->
setTimeZone
(
$timezone
);
if
(
strtolower
(
$start_day_str
)
==
'today'
||
$today
->
format
(
'l'
)
==
$start_day_str
)
{
$start_day
=
clone
$today
;
}
else
{
$start_epoch
=
PhabricatorTime
::
parseLocalTime
(
'last '
.
$start_day_str
,
$user
);
$start_day
=
new
DateTime
(
'@'
.
$start_epoch
);
$start_day
->
setTimeZone
(
$timezone
);
}
return
array
(
'today'
=>
$today
,
'start_day'
=>
$start_day
,
);
}
}
Event Timeline
Log In to Comment