FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
latepoint
/
lib
/
misc
Edit File: time_period.php
<?php /* * Copyright (c) 2022 LatePoint LLC. All rights reserved. */ namespace LatePoint\Misc; class TimePeriod { public int $start_time = 0; public int $end_time = 0; function __construct( $args = [] ) { $allowed_props = self::allowed_props(); foreach ( $args as $key => $arg ) { if ( in_array( $key, $allowed_props ) ) { $this->$key = $arg; } } } public static function merge_periods( array $time_periods ): array { if ( ! $time_periods ) { return []; } $result = [ $time_periods[0] ]; for ( $i = 0; $i < count( $time_periods ); $i++ ) { $x1 = $time_periods[ $i ]->start_time; $y1 = $time_periods[ $i ]->end_time; $x2 = $result[ count( $result ) - 1 ]->start_time; $y2 = $result[ count( $result ) - 1 ]->end_time; if ( $y2 >= $x1 ) { $result[ count( $result ) - 1 ]->end_time = max( $y1, $y2 ); } else { $result[] = new TimePeriod( [ 'start_time' => $x1, 'end_time' => $y1, ] ); } } return $result; } public static function create_from_work_period( WorkPeriod $work_period ) { return new TimePeriod( [ 'start_time' => $work_period->start_time, 'end_time' => $work_period->end_time, ] ); } /** * @param array $overlapped_time_periods * @return TimePeriod */ public static function get_unified_period_from_overlapped_periods( array $overlapped_time_periods ): TimePeriod { $bounds = []; foreach ( $overlapped_time_periods as $time_period ) { $bounds[] = $time_period->start_time; $bounds[] = $time_period->end_time; } return new TimePeriod( [ 'start_time' => min( $bounds ), 'end_time' => max( $bounds ), ] ); } public function check_if_overlaps( TimePeriod $check_time_period ) { return ( ( $this->start_time < $check_time_period->end_time ) && ( $check_time_period->start_time < $this->end_time ) ); } public static function allowed_props(): array { return [ 'start_time', 'end_time', ]; } }
Save
Back