all-in-one-event-calendar/lib/date/date-time-zone.php
2017-11-09 17:36:04 +01:00

53 lines
No EOL
1.6 KiB
PHP

<?php
/**
* Wrapper for `DateTimeZone` to extend it with convenient methods
*
* @author Justas Butkus <justas@butkus.lt>
* @since 2013.03.06
*
* @package AllInOneCalendar
* @subpackage AllInOneCalendar.Utility.Time
*/
class Ai1ec_Date_Date_Time_Zone extends DateTimeZone {
/**
* Map of transitions details for given timestamp
* {@see DateTimeZone::getTransitions()} for representation of details.
* Return a map of prev(ious), curr(ent) and next transitions for
* a given timestamp.
*
* @NOTICE: if we start accepting PHP 5.3 - update getTransitions
* usage, to add offsets.
*
* @param int $timestamp UNIX timestamp (UTC0) for which to find transitions
*
* @return array Map of prev|curr|next transitions
*/
public function getDetailedTransitions( $timestamp ) {
$transition_list = $this->getTransitions();
$output = array(
'prev' => NULL,
'curr' => NULL,
'next' => NULL,
);
$previous = $current = NULL;
foreach ( $transition_list as $transition ) {
if (
NULL !== $previous &&
$timestamp >= $current['ts'] &&
$timestamp < $transition['ts']
) {
$output['prev'] = $previous;
$output['curr'] = $current;
$output['next'] = $transition;
break;
}
$previous = $current;
$current = $transition;
}
unset( $previous, $current, $transition_list, $transition );
return $output;
}
}