iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 29
0

上次已經完成一連串的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


上一篇
[Day28] RESTful API Part5
下一篇
[Day30] Final
系列文
你說Codeigniter還能怎麼做?30

尚未有邦友留言

立即登入留言