The time period processing library provides functions such as sorting, union, difference, intersection, and calculation time.
Continuation library marshung/helper, only keep and maintain TimePeriodHelper
# composer require marsapp/timeperiodhelper
Include composer autoloader before use.
require __PATH__ . "vendor/autoload.php";
- Format: $timePeriods = [[$startDatetime1, $endDatetime1], [$startDatetime2, $endDatetime2], ...];
- $Datetime = Y-m-d H:i:s ; Y-m-d H:i:00 ; Y-m-d H:00:00 ;
- If it is hour/minute/second, the end point is usually not included, for example, 8 o'clock to 9 o'clock is 1 hour.
- â—Ź=====â—‹
- If it is a day/month/year, it usually includes an end point, for example, January to March is 3 months.
- â—Ź=====â—Ź
- When processing, assume that the $timePeriods format is correct. If necessary, you need to call the verification function to verify the data.
- Ensure performance by keeping the $timePeriods format correct:
- When getting the raw $timePeriods, sort out it by format(), filter(), union().
- Handle $timePeriods using only the functions provided by TimePeriodHelper (Will not break the format, sort)
- When you achieve the two operations described above, you can turn off Auto sort out (TimePeriodHelper::setSortOut(false)) to improve performance.
- Good data mastering is a good programmer
- Data should be organized during the validation and processing phases. Then use trusted data as a logical operation
// Namespace use
use marsapp\helper\timeperiod\TimePeriodHelper;
// Get time periods. Maybe the data is confusing.
$workTimeperiods = [
['2019-01-04 13:00:30','2019-01-04 17:00:30'],
['2019-01-04 08:00:30','2019-01-04 10:00:30'],
['2019-01-04 10:00:30','2019-01-04 12:00:30'],
];
/*** Ensure performance by keeping the $timePeriods format correct ***/
// Filter $timeperiods to make sure the data is correct.
$workTimeperiods = TimePeriodHelper::filter($workTimeperiods);
// Sort out $timeperiods to make sure the content and sorting are correct.
$workTimeperiods = TimePeriodHelper::union($workTimeperiods);
// When you achieve the two operations described above, you can turn off Auto sort out (TimePeriodHelper::setSortOut(false)) to improve performance. (Global)
TimePeriodHelper::setSortOut(false);
// Set time unit (Global)
TimePeriodHelper::setUnit('minute');
// Maybe you want change time format
$workTimeperiods = TimePeriodHelper::format($workTimeperiods);
// Now value :
// $workTimeperiods = [ ['2019-01-04 08:00:00','2019-01-04 12:00:00'], ['2019-01-04 13:00:00','2019-01-04 17:00:00'] ];
// Now you can execute the function you want to execute. Like gap()
$gapTimeperiods = TimePeriodHelper::gap($workTimeperiods);
// Result: [ ['2019-01-04 12:00:00','2019-01-04 13:00:00'] ]
// Calculation time
$workTime = TimePeriodHelper::time($workTimeperiods);
// Result: 480
$gapTime = TimePeriodHelper::time($gapTimeperiods);
// Result: 60
setSortOut(), setUnit() Scope: Global Data should be organized during the validation and processing phases. Then use trusted data as a logical operation.
Sort time periods (Order by ASC)
- When sorting, sort the start time first, if the start time is the same, then sort the end time
- Sort Priority: Start Time => End Time
sort(Array $timePeriods) : array
Parameters
- $timePeriods: Time period being processed. array
Return Values
- Returns the resulting array.
Example :
$templete = [
['2019-01-04 12:00:00','2019-01-04 18:00:00'],
['2019-01-04 08:00:00','2019-01-04 12:00:00'],
['2019-01-04 12:00:00','2019-01-04 18:00:00'],
['2019-01-04 12:00:00','2019-01-04 17:00:00'],
['2019-01-04 12:00:00','2019-01-04 19:00:00'],
['2019-01-04 08:00:00','2019-01-04 12:00:00'],
['2019-01-04 09:00:00','2019-01-04 12:00:00'],
['2019-01-04 07:00:00','2019-01-04 12:00:00'],
['2019-01-04 10:00:00','2019-01-04 16:00:00'],
['2019-01-04 11:00:00','2019-01-04 18:00:00'],
['2019-01-04 10:00:00','2019-01-04 18:00:00'],
['2019-01-04 11:00:00','2019-01-04 15:00:00']
];
$result = TimePeriodHelper::sort($templete);
//$result = [
// ['2019-01-04 07:00:00','2019-01-04 12:00:00'],
// ['2019-01-04 08:00:00','2019-01-04 12:00:00'],
// ['2019-01-04 08:00:00','2019-01-04 12:00:00'],
// ['2019-01-04 09:00:00','2019-01-04 12:00:00'],
// ['2019-01-04 10:00:00','2019-01-04 16:00:00'],
// ['2019-01-04 10:00:00','2019-01-04 18:00:00'],
// ['2019-01-04 11:00:00','2019-01-04 15:00:00'],
// ['2019-01-04 11:00:00','2019-01-04 18:00:00'],
// ['2019-01-04 12:00:00','2019-01-04 17:00:00'],
// ['2019-01-04 12:00:00','2019-01-04 18:00:00'],
// ['2019-01-04 12:00:00','2019-01-04 18:00:00'],
// ['2019-01-04 12:00:00','2019-01-04 19:00:00']
//];
Union one or more time periods
- Sort and merge one or more time periods with contacts
- TimePeriodHelper::union($timePeriods1, $timePeriods2, $timePeriods3, ......);
TimePeriodHelper::union(Array $timePeriods1, [Array $timePeriods2, [Array $timePeriods3, ......]]) : array
Parameters
- $timePeriods: Time period being processed. array
Return Values
- Returns the resulting array.
Example :
$templete1 = [
['2019-01-04 13:00:00','2019-01-04 15:00:00'],
['2019-01-04 10:00:00','2019-01-04 12:00:00'],
['2019-01-04 19:00:00','2019-01-04 22:00:00'],
['2019-01-04 15:00:00','2019-01-04 18:00:00']
];
$templete2 = [
['2019-01-04 08:00:00','2019-01-04 09:00:00'],
['2019-01-04 14:00:00','2019-01-04 16:00:00'],
['2019-01-04 21:00:00','2019-01-04 23:00:00']
];
// Sort and merge one timeperiods
$result1 = TimePeriodHelper::union($templete1);
//$result1 = [
// ['2019-01-04 10:00:00','2019-01-04 12:00:00'],
// ['2019-01-04 13:00:00','2019-01-04 18:00:00'],
// ['2019-01-04 19:00:00','2019-01-04 22:00:00']
//];
// Sort and merge two timeperiods
$result2 = TimePeriodHelper::union($templete1, $templete2);
//$result2 = [
// ['2019-01-04 08:00:00','2019-01-04 09:00:00'],
// ['2019-01-04 10:00:00','2019-01-04 12:00:00'],
// ['2019-01-04 13:00:00','2019-01-04 18:00:00'],
// ['2019-01-04 19:00:00','2019-01-04 23:00:00']
//];
Computes the difference of time periods
- Compares $timePeriods1 against $timePeriods2 and returns the values in $timePeriods1 that are not present in $timePeriods2.
- e.g. TimePeriodHelper::diff($timePeriods1, $timePeriods2);
- Whether $timePeriods is sorted out will affect the correctness of the results. Please refer to Note 5. Ensure performance by keeping the $timePeriods format correct.
diff(Array $timePeriods1, Array $timePeriods2, $sortOut = 'default') : array
Parameters
- $timePeriods1: The time periods to compare from, array
- $timePeriods2: An time periods to compare against, array
- $sortOut: Whether the input needs to be rearranged. Value: true, false, 'default'. If it is 'default', see getSortOut()
Return Values
- Returns the resulting array.
Example :
$templete1 = [
['2019-01-04 07:20:00','2019-01-04 08:00:00'],
['2019-01-04 07:00:00','2019-01-04 07:20:00'],
];
$templete2 = [
['2019-01-04 07:30:00','2019-01-04 07:40:00'],
];
/*** Note 5. Ensure performance by keeping the $timePeriods format correct. ***/
// 1. Set Auto sorting out (Scope: Global. Default, no need to set)
//TimePeriodHelper::setSortOut(true);
// 2. Set Manually sorting out (Scope: Global) (When a lot of logic operations, it is better)
TimePeriodHelper::setSortOut(false);
$templete1 = TimePeriodHelper::union($templete1);
$templete2 = TimePeriodHelper::union($templete2);
$result = TimePeriodHelper::diff($templete1, $templete2);
//$result = [
// ['2019-01-04 07:00:00','2019-01-04 07:30:00'],
// ['2019-01-04 07:40:00','2019-01-04 08:00:00'],
//];
Computes the intersection of time periods
- e.g. TimePeriodHelper::intersect($timePeriods1, $timePeriods2);
- Whether $timePeriods is sorted out will affect the correctness of the results. Please refer to Note 5. Ensure performance by keeping the $timePeriods format correct.
intersect(Array $timePeriods1, Array $timePeriods2, $sortOut = 'default') : array
Parameters
- $timePeriods1: The time periods to compare from, array
- $timePeriods2: An time periods to compare against, array
- $sortOut: Whether the input needs to be rearranged. Value: true, false, 'default'. If it is 'default', see getSortOut()
Return Values
- Returns the resulting array.
Example :
$templete1 = [
['2019-01-04 07:35:00','2019-01-04 08:00:00'],
['2019-01-04 07:00:00','2019-01-04 07:35:00'],
];
$templete2 = [
['2019-01-04 07:30:00','2019-01-04 07:40:00'],
];
/*** Note 5. Ensure performance by keeping the $timePeriods format correct. ***/
// 1. Set Auto sorting out (Scope: Global. Default, no need to set)
//TimePeriodHelper::setSortOut(true);
// 2. Set Auto sorting out (Scope: Global) (When a lot of logic operations, it is better)
TimePeriodHelper::setSortOut(false);
$templete1 = TimePeriodHelper::union($templete1);
$templete2 = TimePeriodHelper::union($templete2);
$result = TimePeriodHelper::intersect($templete1, $templete2);
//$result = [
// ['2019-01-04 07:30:00','2019-01-04 07:40:00'],
//];
Time period is overlap
Determine if there is overlap between the two time periods
isOverlap(Array $timePeriods1, Array $timePeriods2) : bool
Parameters
- $timePeriods1: The time periods to compare from, array
- $timePeriods2: An time periods to compare against, array
Return Values
- Returns the resulting bool.
Example :
$templete1 = [
['2019-01-04 07:00:00','2019-01-04 08:00:00']
];
$templete2 = [
['2019-01-04 07:30:00','2019-01-04 07:40:00'],
];
$result = TimePeriodHelper::isOverlap($templete1, $templete2);
// $result = true;
The time period is in contact with the specified time (time period)
contact(Array $timePeriods, String $sDateTime, String $eDateTime = null, $sortOut = 'default') : Array
Parameters
- $timePeriods: The time periods to compare from, array
- $sDateTime: Specified time to compare against, string
- $eDateTime: Specified time to compare against, string
- $sortOut: Whether the input needs to be rearranged. Value: true, false, 'default'. If it is 'default', see getSortOut()
Return Values
- Returns the resulting array.
Example :
$templete = [
['2019-01-04 08:00:00','2019-01-04 12:00:00'],
['2019-01-04 13:00:00','2019-01-04 16:00:00'],
['2019-01-04 17:00:00','2019-01-04 19:00:00']
];
$result = TimePeriodHelper::contact($templete, '2019-01-04 12:00:00');
// $result = [];
$result = TimePeriodHelper::contact($templete, '2019-01-04 12:00:00', '2019-01-04 13:00:00');
// $result = [];
$result = TimePeriodHelper::contact($templete, '2019-01-04 12:00:00', '2019-01-04 14:00:00');
// $result = [['2019-01-04 13:00:00','2019-01-04 16:00:00']];
$result = TimePeriodHelper::contact($templete, '2019-01-04 13:00:00');
// $result = [['2019-01-04 13:00:00','2019-01-04 16:00:00']];
$result = TimePeriodHelper::contact($templete, '2019-01-04 13:00:00', '2019-01-04 14:00:00');
// $result = [['2019-01-04 13:00:00','2019-01-04 16:00:00']];
$result = TimePeriodHelper::contact($templete, '2019-01-04 13:30:00');
// $result = [['2019-01-04 13:00:00','2019-01-04 16:00:00']];
$result = TimePeriodHelper::contact($templete, '2019-01-04 13:30:00', '2019-01-04 18:00:00');
// $result = [['2019-01-04 13:00:00','2019-01-04 16:00:00'], ['2019-01-04 17:00:00','2019-01-04 19:00:00']];
$result = TimePeriodHelper::contact($templete, '2019-01-04 13:30:00', '2019-01-04 22:00:00');
// $result = [['2019-01-04 13:00:00','2019-01-04 16:00:00'], ['2019-01-04 17:00:00','2019-01-04 19:00:00']];
Time period greater than the specified time
greaterThan(Array $timePeriods, $refDatetime, $fullTimePeriod = true, $sortOut = 'default') : Array
Parameters
- $timePeriods: The time periods to compare from, array
- $refDatetime: Specified time to compare against, string
- $fullTimePeriod: Get only the full time period, bool
- $sortOut: Whether the input needs to be rearranged. Value: true, false, 'default'. If it is 'default', see getSortOut()
Return Values
- Returns the resulting array.
Example :
$templete = [
['2019-01-04 08:00:00','2019-01-04 12:00:00'],
['2019-01-04 13:00:00','2019-01-04 16:00:00'],
['2019-01-04 17:00:00','2019-01-04 19:00:00']
];
$result = TimePeriodHelper::greaterThan($templete, '2019-01-04 13:00:00', false);
// $result = [['2019-01-04 13:00:00','2019-01-04 16:00:00'], ['2019-01-04 17:00:00','2019-01-04 19:00:00']];
$result = TimePeriodHelper::greaterThan($templete, '2019-01-04 14:00:00', false);
// $result = [['2019-01-04 13:00:00','2019-01-04 16:00:00'], ['2019-01-04 17:00:00','2019-01-04 19:00:00']];
$result = TimePeriodHelper::greaterThan($templete, '2019-01-04 16:00:00', false);
// $result = [['2019-01-04 17:00:00','2019-01-04 19:00:00']];
$result = TimePeriodHelper::greaterThan($templete, '2019-01-04 13:00:00', true);
// $result = [['2019-01-04 13:00:00','2019-01-04 16:00:00'], ['2019-01-04 17:00:00','2019-01-04 19:00:00']];
$result = TimePeriodHelper::greaterThan($templete, '2019-01-04 14:00:00', true);
// $result = [['2019-01-04 17:00:00','2019-01-04 19:00:00']];
$result = TimePeriodHelper::greaterThan($templete, '2019-01-04 16:00:00', true);
// $result = [['2019-01-04 17:00:00','2019-01-04 19:00:00']];
$result = TimePeriodHelper::greaterThan($templete, '2019-01-04 14:00:00');
// $result = [['2019-01-04 17:00:00','2019-01-04 19:00:00']];
Time period less than the specified time
lessThan(Array $timePeriods, $refDatetime, $fullTimePeriod = true, $sortOut = 'default') : Array
Parameters
- $timePeriods: The time periods to compare from, array
- $refDatetime: Specified time to compare against, string
- $fullTimePeriod: Get only the intact time period, bool
- $sortOut: Whether the input needs to be rearranged. Value: true, false, 'default'. If it is 'default', see getSortOut()
Return Values
- Returns the resulting array.
Example :
$templete = [
['2019-01-04 08:00:00','2019-01-04 12:00:00'],
['2019-01-04 13:00:00','2019-01-04 16:00:00'],
['2019-01-04 17:00:00','2019-01-04 19:00:00']
];
$result = TimePeriodHelper::lessThan($templete, '2019-01-04 13:00:00', false);
// $result = ['2019-01-04 08:00:00','2019-01-04 12:00:00']];
$result = TimePeriodHelper::lessThan($templete, '2019-01-04 14:00:00', false);
// $result = [['2019-01-04 08:00:00','2019-01-04 12:00:00'], ['2019-01-04 13:00:00','2019-01-04 16:00:00']];
$result = TimePeriodHelper::lessThan($templete, '2019-01-04 16:00:00', false);
// $result = [['2019-01-04 08:00:00','2019-01-04 12:00:00'], ['2019-01-04 13:00:00','2019-01-04 16:00:00']];
$result = TimePeriodHelper::lessThan($templete, '2019-01-04 13:00:00', true);
// $result = ['2019-01-04 08:00:00','2019-01-04 12:00:00']];
$result = TimePeriodHelper::lessThan($templete, '2019-01-04 14:00:00', true);
// $result = ['2019-01-04 08:00:00','2019-01-04 12:00:00']];
$result = TimePeriodHelper::lessThan($templete, '2019-01-04 16:00:00', true);
// $result = [['2019-01-04 08:00:00','2019-01-04 12:00:00'], ['2019-01-04 13:00:00','2019-01-04 16:00:00']];
$result = TimePeriodHelper::lessThan($templete, '2019-01-04 14:00:00');
// $result = ['2019-01-04 08:00:00','2019-01-04 12:00:00']];
Fill time periods
Leaving only the first start time and the last end time
fill(Array $timePeriods) : array
Parameters
- $timePeriods: Time period being processed. array
Return Values
- Returns the resulting array.
Example :
$templete = [
['2019-01-04 08:00:00','2019-01-04 12:00:00'],
['2019-01-04 10:00:00','2019-01-04 19:00:00'],
['2019-01-04 12:00:00','2019-01-04 18:00:00']
];
$result = TimePeriodHelper::fill($templete);
//$result = [
// ['2019-01-04 08:00:00','2019-01-04 19:00:00'],
//];
Get gap time periods of multiple sets of time periods
- Whether $timePeriods is sorted out will affect the correctness of the results. Please refer to Note 5. Ensure performance by keeping the $timePeriods format correct.
gap(Array $timePeriods, $sortOut = 'default') : array
Parameters
- $timePeriods: Time period being processed. array
- $sortOut: Whether the input needs to be rearranged. Value: true, false, 'default'. If it is 'default', see getSortOut()
Return Values
- Returns the resulting array.
Example :
$templete = [
['2019-01-04 08:00:00','2019-01-04 12:00:00'],
['2019-01-04 04:00:00','2019-01-04 05:00:00'],
['2019-01-04 07:00:00','2019-01-04 09:00:00'],
['2019-01-04 13:00:00','2019-01-04 18:00:00']
];
/*** Note 5. Ensure performance by keeping the $timePeriods format correct. ***/
// 1. Set Auto sorting out (Scope: Global. Default, no need to set)
//TimePeriodHelper::setSortOut(true);
// 2. Set Manually sorting out (Scope: Global) (When a lot of logic operations, it is better)
TimePeriodHelper::setSortOut(false);
$templete = TimePeriodHelper::union($templete);
$result = TimePeriodHelper::gap($templete);
//$result = [
// ['2019-01-04 05:00:00','2019-01-04 07:00:00'],
// ['2019-01-04 12:00:00','2019-01-04 13:00:00'],
//];
Calculation period total time
- You can specify the smallest unit (from setUnit())
- Whether $timePeriods is sorted out will affect the correctness of the results. Please refer to Note 5. Ensure performance by keeping the $timePeriods format correct.
- approximation: chop off
time(Array $timePeriods, Int $precision = 0, $sortOut = 'default') : array
Parameters
- $timePeriods: Time period being processed. array
- $precision: Optional decimal places for the decimal point. int
- $sortOut Whether the input needs to be rearranged. Value: true, false, 'default'. If it is 'default', see getSortOut()
Return Values
- Returns the resulting number.
Example :
$templete = [
['2019-01-04 08:00:00','2019-01-04 12:00:00'],
['2019-01-04 04:00:00','2019-01-04 05:00:00'],
['2019-01-04 07:00:00','2019-01-04 09:00:00'],
['2019-01-04 13:00:00','2019-01-04 18:30:30']
];
/*** Note 5. Ensure performance by keeping the $timePeriods format correct. ***/
// 1. Set Auto sorting out (Scope: Global. Default, no need to set)
//TimePeriodHelper::setSortOut(true);
// 2. Set Manually sorting out (Scope: Global) (When a lot of logic operations, it is better)
TimePeriodHelper::setSortOut(false);
$templete= TimePeriodHelper::union($templete);
TimePeriodHelper::setUnit('hour');
$resultH1 = TimePeriodHelper::time($templete);
// $resultH = 11;
$resultH2 = TimePeriodHelper::time($templete, 4);
// $resultH = 11.5083;
$resultM = TimePeriodHelper::setUnit('minutes')->time($templete, 2);
// $resultM = 690.5;
TimePeriodHelper::setUnit('s');
$resultS = TimePeriodHelper::time($templete);
// $resultS = 41430;
Unit:
- hour, hours, h
- minute, minutes, m
- second, seconds, s
Cut the time period of the specified length of time
- You can specify the smallest unit (from setUnit())
- Whether $timePeriods is sorted out will affect the correctness of the results. Please refer to Note 5. Ensure performance by keeping the $timePeriods format correct.
cut(Array $timePeriods, Int $time, $sortOut = 'default') : array
Parameters
- $timePeriods: Time period being processed. array
- $time: Specified length of time
- $sortOut: $sortOut Whether the input needs to be rearranged. Value: true, false, 'default'. If it is 'default', see getSortOut()
Return Values
- Returns the resulting array.
Example :
$templete = [
['2019-01-04 08:20:00','2019-01-04 12:00:00'],
['2019-01-04 08:00:00','2019-01-04 08:25:00']
];
/*** Note 5. Ensure performance by keeping the $timePeriods format correct. ***/
// 1. Set Auto sorting out (Scope: Global. Default, no need to set)
//TimePeriodHelper::setSortOut(true);
// 2. Set Manually sorting out (Scope: Global) (When a lot of logic operations, it is better)
TimePeriodHelper::setSortOut(false);
$templete = TimePeriodHelper::union($templete);
$resultM = TimePeriodHelper::setUnit('minutes')->cut($templete, '30');
// $resultM = [
// ['2019-01-04 08:00:00','2019-01-04 08:30:00']
// ];
TimePeriodHelper::setUnit('hour');
$resultH1 = TimePeriodHelper::cut($templete, '30');
// $resultH1 = [
// ['2019-01-04 08:00:00','2019-01-04 12:00:00']
// ];
Unit:
- hour, hours, h
- minute, minutes, m
- second, seconds, s
Increase the time period of the specified length of time after the last time period
- You can specify the smallest unit (from setUnit())
- Whether $timePeriods is sorted out will affect the correctness of the results. Please refer to Note 5. Ensure performance by keeping the $timePeriods format correct.
extend(Array $timePeriods, Int $time, $interval = 0, $sortOut = 'default') : array
Parameters
- $timePeriods: Time period being processed. array
- $time: Specified length of time
- $interval: Interval with existing time period
- $sortOut: $sortOut Whether the input needs to be rearranged. Value: true, false, 'default'. If it is 'default', see getSortOut()
Return Values
- Returns the resulting array.
If you can be sure that the input value is already collated(Executed union())
Example :
$templete = [
['2019-01-04 08:20:00','2019-01-04 12:00:00'],
['2019-01-04 08:00:00','2019-01-04 08:25:00'],
];
/*** Note 5. Ensure performance by keeping the $timePeriods format correct. ***/
// 1. Set Auto sorting out (Scope: Global. Default, no need to set)
//TimePeriodHelper::setSortOut(true);
// 2. Set Manually sorting out (Scope: Global) (When a lot of logic operations, it is better)
TimePeriodHelper::setSortOut(false);
$templete = TimePeriodHelper::union($templete);
$resultM1 = TimePeriodHelper::setUnit('minutes')->extend($templete, 30, 0);
// $resultM1 = [
// ['2019-01-04 08:00:00','2019-01-04 12:30:00']
// ];
$resultM2 = TimePeriodHelper::setUnit('minutes')->extend($templete, 30, 40);
// $resultM2 = [
// ['2019-01-04 08:00:00','2019-01-04 12:00:00'], ['2019-01-04 12:40:00','2019-01-04 13:10:00']
// ];
TimePeriodHelper::setUnit('hour');
$resultH1 = TimePeriodHelper::extend($templete, 2, 0);
// $resultH1 = [
// ['2019-01-04 08:00:00','2019-01-04 14:00:00']
// ];
$resultH2 = TimePeriodHelper::setUnit('hour')->extend($templete, 2, 1);
// $resultH2 = [
// ['2019-01-04 08:00:00','2019-01-04 12:00:00'], ['2019-01-04 13:00:00','2019-01-04 15:00:00']
// ];
Unit:
- hour, hours, h
- minute, minutes, m
- second, seconds, s
Shorten the specified length of time from behind
- You can specify the smallest unit (from setUnit())
- Whether $timePeriods is sorted out will affect the correctness of the results. Please refer to Note 5. Ensure performance by keeping the $timePeriods format correct.
shorten(Array $timePeriods, Int $time, $crossperiod = true, $sortOut = 'default') : array
Parameters
- $timePeriods: Time period being processed. array
- $time: Specified length of time
- $crossperiod: Whether to shorten across time
- $sortOut: $sortOut Whether the input needs to be rearranged. Value: true, false, 'default'. If it is 'default', see getSortOut()
Return Values
- Returns the resulting array.
If you can be sure that the input value is already collated(Executed union())
Example :
$templete = [
['2019-01-04 13:00:00','2019-01-04 15:00:00'],
['2019-01-04 08:20:00','2019-01-04 12:00:00'],
['2019-01-04 08:00:00','2019-01-04 08:25:00'],
];
/*** Note 5. Ensure performance by keeping the $timePeriods format correct. ***/
// 1. Set Auto sorting out (Scope: Global. Default, no need to set)
//TimePeriodHelper::setSortOut(true);
// 2. Set Manually sorting out (Scope: Global) (When a lot of logic operations, it is better)
TimePeriodHelper::setSortOut(false);
$templete = TimePeriodHelper::union($templete);
TimePeriodHelper::setUnit('minutes');
$resultM1 = TimePeriodHelper::shorten($templete, 30, true);
// $resultM1 = [
// ['2019-01-04 08:00:00','2019-01-04 12:00:00'], ['2019-01-04 13:00:00','2019-01-04 14:30:00']
// ];
$resultH1 = TimePeriodHelper::setUnit('hour')->shorten($templete, 1, true);
// $resultH1 = [
// ['2019-01-04 08:00:00','2019-01-04 12:00:00'], ['2019-01-04 13:00:00','2019-01-04 14:00:00']
// ];
$resultH2 = TimePeriodHelper::setUnit('hour')->shorten($templete, 2, true);
// $resultH2 = [
// ['2019-01-04 08:00:00','2019-01-04 12:00:00']
// ];
$resultH3 = TimePeriodHelper::setUnit('hour')->shorten($templete, 5, true);
// $resultH3 = [
// ['2019-01-04 08:00:00','2019-01-04 09:00:00']
// ];
$resultH4 = TimePeriodHelper::setUnit('hour')->shorten($templete, 10, true);
// $resultH4 = [];
$resultH5 = TimePeriodHelper::setUnit('hour')->shorten($templete, 1, false);
// $resultH5 = [
// ['2019-01-04 08:00:00','2019-01-04 12:00:00'], ['2019-01-04 13:00:00','2019-01-04 14:00:00']
// ];
$resultH6 = TimePeriodHelper::setUnit('hour')->shorten($templete, 2, false);
// $resultH6 = [
// ['2019-01-04 08:00:00','2019-01-04 12:00:00']
// ];
$resultH7 = TimePeriodHelper::setUnit('hour')->shorten($templete, 5, false);
// $resultH7 = [
// ['2019-01-04 08:00:00','2019-01-04 12:00:00']
// ];
$resultH8 = TimePeriodHelper::setUnit('hour')->shorten($templete, 10, false);
// $resultH8 = [
// ['2019-01-04 08:00:00','2019-01-04 12:00:00']
// ];
Unit:
- hour, hours, h
- minute, minutes, m
- second, seconds, s
Transform format
format(Array $timePeriods, $unit = 'default') : array
Parameters
- $timePeriods: Time period being processed. array
- $unit: Time unit, if default,use class options setting
Return Values
- Returns the resulting array.
$unit: Time unit, if default,use class options setting
Example :
$templete = [
['2019-01-04 08:11:11','2019-01-04 12:22:22'],
['2019-01-04 04:33:33','2019-01-04 05:44:44'],
['2019-01-04 05:55','2019-01-04 06:55'],
['2019-01-04 07','2019-01-04 08'],
];
// Set time uint
TimePeriodHelper::setUnit('minute');
// Convert format
$result = TimePeriodHelper::format($templete);
//$result = [
// ['2019-01-04 08:11:00','2019-01-04 12:22:00'],
// ['2019-01-04 04:33:00','2019-01-04 05:44:00'],
// ['2019-01-04 05:55:00','2019-01-04 06:55:00'],
// ['2019-01-04 07:00:00','2019-01-04 08:00:00'],
//];
Validate time period
Verify format, size, start/end time.
Format: Y-m-d H:i:s
validate(Array $timePeriods) : Exception | true
Parameters
- $timePeriods: Time period being processed. array
Return Values
- Returns the resulting bool.
Exception
- If there is an error, an exception will be thrown
Example :
$templete = [
['2019-01-04 02:00:00','2019-01-04 03:00:00'],
['2019-01-04 08:00:00','2019-01-04 12:00:00','2019-01-04 12:00:00'],
['2019-01-04 04:00:00'],
['2019-01-04 04:00','2019-01-04 05:00:00'],
'string',
['2019-01-04 08:00:00','2019-01-04 05:00:00'],
['2019-01-04 19:00:00','2019-01-04 19:00:00'],
];
try {
$result = TimePeriodHelper::validate($templete);
} catch (\Exception $e) {
$result = false;
}
//$result = false;
Remove invalid time period
Verify format, size, start/end time, and remove invalid.
filter(Array $timePeriods) : array
Parameters
- $timePeriods: Time period being processed. array @see setFilterDatetime();
Return Values
- Returns the resulting array.
Example :
$templete = [
['2019-01-04 02:00:00','2019-01-04 03:00:00'],
['2019-01-04 08:00:00','2019-01-04 12:00:00','2019-01-04 12:00:00'],
['2019-01-04 04:00:00'],
['2019-01-04 04:00','2019-01-04 05:00:00'],
'string',
['2019-01-04 08:00:00','2019-01-04 05:00:00'],
['2019-01-04 19:00:00','2019-01-04 19:00:00'],
['2019-01-04 24:00:00','2019-01-05 24:00:00'],
];
// Set whether need to filter the datetime
//TimePeriodHelper::setFilterDatetime(false);
// Filter time period
$result = TimePeriodHelper::filter($templete);
//$result = [
// ['2019-01-04 02:00:00','2019-01-04 03:00:00'],
// ['2019-01-05 00:00:00','2019-01-06 00:00:00'],
//];
- If you do not want to filter the datetime format, set it to setFilterDatetime(false).
- Maybe the time format is not Y-m-d H:i:s (such as Y-m-d H:i), you need to close it.
Specify the minimum unit of calculation
- Scope: Global
- hour,minute,second
setUnit(string $unit, string $target = 'all') : self
Parameters
- $unit: time unit. e.g. hour, minute, second.
- $target: Specify function,or all functions
Return Values
- self
Exception
- If there is an error, an exception will be thrown
Example :
// Set unit hour for all
TimePeriodHelper::setUnit('hour');
// Set unit hour for format
TimePeriodHelper::setUnit('minute', 'format');
// Get unit
$result1 = TimePeriodHelper::getUnit('time');
//$result1 = 'hour';
$result2 = TimePeriodHelper::getUnit('format');
//$result2 = 'minute';
Get the unit used by the specified function
getUnit(string $target) : string
Parameters
- $target: Specify function's unit
Return Values
- Returns the resulting string.
Exception
- If there is an error, an exception will be thrown
Example :
// Set unit hour for all
TimePeriodHelper::setUnit('hour');
// Set unit hour for format
TimePeriodHelper::setUnit('minute', 'format');
// Get unit
$result1 = TimePeriodHelper::getUnit('time');
//$result1 = 'hour';
$result2 = TimePeriodHelper::getUnit('format');
//$result2 = 'minute';
If neet filter datetime : Set option
- Scope: Global
- If you do not want to filter the datetime format, set it to false.
- Maybe the time format is not Y-m-d H:i:s (such as Y-m-d H:i), you need to close it.
setFilterDatetime(Bool $bool) : self
Parameters
- $bool: If you do not want to filter the datetime format, set it to false.
Return Values
- self
Example :
TimePeriodHelper::setFilterDatetime(false);
$result1 = TimePeriodHelper::getFilterDatetime();
//$result1 = false;
TimePeriodHelper::setFilterDatetime(true);
$result2 = TimePeriodHelper::getFilterDatetime();
//$result1 = true;
If neet filter datetime : Get option
getFilterDatetime() : bool
Return Values
- Returns the resulting bool.
Example :
TimePeriodHelper::setFilterDatetime(false);
$result1 = TimePeriodHelper::getFilterDatetime();
//$result1 = false;
TimePeriodHelper::setFilterDatetime(true);
$result2 = TimePeriodHelper::getFilterDatetime();
//$result1 = true;
Auto sort out $timePeriods : Set option
- Before the function is processed, union() will be used to organize $timePeriods format.
- Scope: Global
setSortOut(bool $bool = true) : self
Parameters
- $bool: Set auto sort out or not
Return Values
- self
Example :
TimePeriodHelper::setSortOut(false);
$result1 = TimePeriodHelper::getSortOut();
//$result1 = false;
TimePeriodHelper::setSortOut(true);
$result2 = TimePeriodHelper::getSortOut();
//$result1 = true;
Auto sort out $timePeriods : Get option
getSortOut() : bool
Return Values
- Returns the resulting bool.
Example :
TimePeriodHelper::setSortOut(false);
$result1 = TimePeriodHelper::getSortOut();
//$result1 = false;
TimePeriodHelper::setSortOut(true);
$result2 = TimePeriodHelper::getSortOut();
//$result1 = true;
Check datetime fast.
Only check format,no check for reasonableness
isDatetime(string $datetime) : bool
Parameters
- $datetime: datetime (format:Y-m-d H:i:s). string
Return Values
- Returns the resulting bool.
Example :
$result = TimePeriodHelper::isDatetime('2019-01-04 08:00:00');
// $result = true;
$result = TimePeriodHelper::isDatetime('2019-01-04 88:88:88');
// $result = true;
$result = TimePeriodHelper::isDatetime('2019-01-04 08:00');
// $result = false;
Time format convert
- format:Y-m-d H:i:s
- When the length is insufficient, it will add the missing
timeFormatConv(string $datetime, $unit = 'default') : string
Parameters
- $datetime: datetime (format:Y-m-d H:i:s). string
- $unit: Time unit, if default,use class options setting
Return Values
- Returns the resulting string.
Example :
$result = TimePeriodHelper::timeFormatConv('2019-01-04 08:33:33');
// $result = '2019-01-04 08:33:33';
$result = TimePeriodHelper::timeFormatConv('2019-01-04 08:33:33', 'default');
// $result = '2019-01-04 08:33:33';
$result = TimePeriodHelper::timeFormatConv('2019-01-04 08:33:33', 'second');
// $result = '2019-01-04 08:33:33';
$result = TimePeriodHelper::timeFormatConv('2019-01-04 08:33:33', 'minute');
// $result = '2019-01-04 08:33:00';
$result = TimePeriodHelper::timeFormatConv('2019-01-04 08:33:33', 'hour');
// $result = '2019-01-04 08:00:00';
$result = TimePeriodHelper::timeFormatConv('2019-01-04 08');
// $result = '2019-01-04 08:00:00';
$result = TimePeriodHelper::timeFormatConv('2019-01-04 08', 'default');
// $result = '2019-01-04 08:00:00';
$result = TimePeriodHelper::timeFormatConv('2019-01-04 08', 'default');
// $result = '2019-01-04 08:00:00';
$result = TimePeriodHelper::timeFormatConv('2019-01-04 08', 'default');
// $result = '2019-01-04 08:00:00';
$result = TimePeriodHelper::timeFormatConv('2019-01-04 08', 'default');
// $result = '2019-01-04 08:00:00';
Time Conversion frm unit to second
time2Second($time, $unit = 'default') : number
Parameters
- $time: time. number
- $unit: Time unit, if default,use class options setting
Return Values
- Returns the resulting number.
Example :
$result = TimePeriodHelper::time2Second(30);
// $result = 30;
$result = TimePeriodHelper::time2Second(30, 'default');
// $result = 30;
$result = TimePeriodHelper::time2Second(30, 'second');
// $result = 30;
$result = TimePeriodHelper::time2Second(30, 'minute');
// $result = 1800;
$result = TimePeriodHelper::time2Second(30, 'hour');
// $result = 108000;
- 2019-03-24
- Create By Mars.Hung
- Document, Test
- 2019-07-04
- Unit Test, Code Coverage
- 2019-07-06
- Code Quality Test by scrutinizer, codeclimate