Carbon

基本上時間相關功能都會用到它,這邊我不多贅述只是列出一些我常用到的功能,剩下的大家可以點擊這個連結過去看,http://carbon.nesbot.com/docs/

// 將一週的第一天改為星期日
    Carbon::setWeekStartsAt(Carbon::SUNDAY);
// 將一週的最後一天改為星期六
    Carbon::setWeekEndsAt(Carbon::SATURDAY);
// 現在時間
    Carbon::now();
// 創造一個日期
    Carbon::create(2001, 5, 21, 12, 50, 30); // 年.月.日.時.分.秒
// 查年份
    $dt->year
// 查月份
    $dt->month
// 查日期
    $dt->day
// 查小時
    $dt->hour
// 查分鐘
    $dt->minute
// 查秒數
    $dt->second
// 查當天在這一週的哪一天
    $dt->dayOfWeek
// 查當天在這個月的哪一天
    $dt->dayOfMonth
// 查當天在這一年的哪一天
    $dt->dayOfyear
// 查這週在這個月的哪一週
    $dt->weekOfMonth
// 查這週在這一年的哪一週
    $dt->weekOfYear
// 將時間輸出成字串
    $dt->toDateTimeString()
// 增加年
    $dt->addYear()
    $dt->addYears(5)
// 增加月
    $dt->addMonth()
    $dt->addMonths(5)
// 增加日
    $dt->addDay()
    $dt->addDays(5)
// 增加週
    $dt->addWeek()
    $dt->addWeeks(5)
// 一月的第一天以及最後一天
    $dt->startOfMonth()
    $dt->endOfMonth()
// 一年的第一天以及最後一天
    $dt->startOfYear()
    $dt->endOfYear()
// 一天的頭以及尾
    $dt->startOfDay()
    $dt->endOfDay()

當我們從資料庫,或是從哪邊弄到時間字串的時候,都需要先切割然後再生成Carbon能看得懂的時間

  /**
   * 將時間字串轉成Carbon看得懂得時間格式
   * 此時間字串格式為yyyy-mm-dd hh:ii:ss
   * @param  [string] $dt [要轉換的時間字串]
   */
  public function change_to_carbon($dt){
    // 將日期跟時間分開
    $re = explode(' ', $dt);
    $date = $re[0];
    $time = $re[1];
    // 將日其中的年月日分開
    $year = explode('-', $date)[0];
    $month = explode('-', $date)[1];
    $day = explode('-', $date)[2];
    // 將時間中的時分秒分開
    $hour = explode(':', $time)[0];
    $minute = explode(':', $time)[1];
    $second = explode(':', $time)[2];

    $dt = Carbon::create($year,$month,$day,$hour,$minute,$second);
    // 將一週的第一天改為星期日
    Carbon::setWeekStartsAt(Carbon::SUNDAY);
    // 將一週的最後一天改為星期六
    Carbon::setWeekEndsAt(Carbon::SATURDAY);
    return $dt;
  }

當然我們也可以直接用另一種方式

Carbon::parse("YY-mm-dd hh:ii:ss");

還有一點,時間可以互相比大小,如下

$start_date = Carbon::parse($task_data->task_start_date);
$now_date = Carbon::now();

if($start_date < $now_date){ // 直接做比較,但是無法加減乘除,只能比較在這天之前或是之後這樣
  $diff = strtotime($now_date)-strtotime($start_date);
  $val = floor($diff/($task_data->task_interval*86400));
  $days = $val*$task_data->task_interval*86400;
  $start_date = date("Y-m-d H:i:s",strtotime($start_date)+$days);
}

Last updated