上次已經完成一連串的API改造,這次我們追加一個套件,這個套件主要是針對日期去做管理:
首先我們新增一個libraries/Date.php
:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
/**
* v1.0 日期篩選
**/
class Date {
}
首先我們建立抓取範圍區間的日期,並回傳陣列:
/**
* 取得範圍日期
*/
function range_date($start, $end){
$date = $start;
$date = new DateTime($start);
$date = $date->format('Y-m-d');
do {
$res[] = $date;
$date = new DateTime($date);
$date->modify('+1 day');
$date = $date->format('Y-m-d');
} while ($date <= $end);
return $res;
}
下一步我們可以嘗試建立範圍的數量:
/**
* 取得範圍日期數量
*/
function range_date_count($start, $end){
return count($this->range_date($start, $end));
}
接著我們新增透過星期來篩選日期,例如像是某段時間區間的週一,他就會把週一的日期一併回傳:
/**
* 範圍日期篩選週
* 選擇星期 = $frequency
*/
function date_filter_week($start, $end, $frequency){
$res = array();
foreach($this->range_date($start, $end) as $value){
$w = date("w",strtotime($value));
if(in_array($w,$frequency)){
$res[] = $value;
}
}
return $res;
}
另外有時候我們會需要針對日期往後或往前幾天:
/**
* 日期推移 支援往前往後
* date 起算日
* num 推移數量,往前可輸入負值
*/
function date_push($date, $num){
$date = new DateTime($date);
$date->modify('+'.$num.' day');
$date = $date->format('Y-m-d');
return $date;
}
接著我們再把他加入到設定檔,打開config/autoload.php
:
$autoload['libraries'] = array('mongo_db', 'getpost', 'date');
接著之後我們可以在裡面直接透過指令取得資料,如$this->date->date_push('2018-01-02', 1);
,他就會得到2018-01-03
的日期。
Next station ... Final