工具篇 - Carbon
我只是一個搬運工 ~ 0.0
Carbon介紹
是php的日期處理類庫
Carbon 繼承了PHP的 類,所以 Carbon 中沒有涉及到的,但在 中已經實現的方法都是可以使用的。
Laravel 中的 Carbon 就是這貨。
選擇適合的Carbon版本:
目前 Carbon 1.x 僅版本適用於php 5.3以上的版本
Carbon 2.x 也可以使用了,但是要求php 5.4以上的版本
選擇合適的安裝方式:
composer安裝(最簡單並且推薦的方法):
命令列安裝
$ composer require nesbot/carbon
編輯composer.json檔案:
{
"require": {
"nesbot/carbon": "*"
}
}
Carbon.php安裝到專案中:
<?php
require 'path/to/Carbon.php';
use CarbonCarbon;
printf("Now: %s", Carbon::now());
Carbon例項
Carbon 類宣告在 Carbon 名稱空間下,可以透過引入名稱空間的方式來代替每次輸入完整的類名。
<?php
use CarbonCarbon;
Note: 如果在使用 Carbon 時,沒有專門設定時區的話,預設使用 America/Toronto 的時區。
要特別留意是否使用了正確的時區,比如 Carbon 的所有差異比較都使用 UTC 或者系統設定的時區。
<?php
$dtToronto = Carbon::createFromDate(2019, 1, 1, 'America/Toronto');
$dtVancouver = Carbon::createFromDate(2019, 1, 1, 'America/Vancouver');
echo $dtVancouver->diffInHours($dtToronto); // 3
以上進行的時間比較是在提供的 Carbon 例項所在的時區下完成的。例如作者所在的時區為 東京時間減13 小時,因此在下午一點後。Carbon::now(‘Asia/Tokyo’)->isToday() 將會返回 false ,如果在呼叫 now() 時設定時區為東京時區,接下來的操作都使用東京時區是說不過去的。所以在與 now() 建立的例項進行比較時,預設是在當前時區下完成的。
值得注意的是,Carbon 構造器的第二個引數被增強到了不僅限於是 例項,還可以是 String、Integer。舉個例子來說明下 now() 方法。
<?php
$now = Carbon::now();
$nowInLondonTz = Carbon::now(new DateTimeZone('Europe/London'));
// or just pass the timezone as a string
$nowInLondonTz = Carbon::now('Europe/London');
// or to create a date with a timezone of +1 to GMT during DST then just pass an integer
echo Carbon::now(1)->tzName; // Europe/London
你將會喜歡上用 parse() 方法來代替原有繁瑣的構造方式
<?php
echo (new Carbon('first day of December 2008'))->addWeeks(2); // 2008-12-15 00:00:00
echo Carbon::parse('first day of December 2008')->addWeeks(2); // 2008-12-15 00:00:00
類似 now() 這樣直接返回 Carbon 例項的方法還有 today(), tomorrow(),yesterday(),他們都接受一個 timezone 型別的引數,最後得到的結果時間部分都是 00:00:00
<?php
$now = Carbon::now();
echo $now; // 2018-12-14 15:18:34
$today = Carbon::today();
echo $today; // 2018-12-14 00:00:00
$tomorrow = Carbon::tomorrow('Europe/London');
echo $tomorrow; // 2018-12-15 00:00:00
$yesterday = Carbon::yesterday();
echo $yesterday; // 2018-12-13 00:00:00
下面是一些其他的 creatXXX() 形式的靜態方法。絕大多數靜態方法的引數是可傳可不傳的,如果不傳的話會使用方法預設的預設值,這些預設值一般都是針對當前日期、時間、時區的。如果為傳遞某個必要引數,會丟擲一個 型別的異常,用 方法可以得到異常的詳細資訊。
<?php
Carbon::createFromDate($year, $month, $day, $tz);
Carbon::createFromTime($hour, $minute, $second, $tz);
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
createFromDate() 預設返回當前時間,createFromTime()日期預設是今天。crete() 所有為 null 的引數都將預設為當前對應的時間。同樣,時區也預設是當前時區。如果只設定了小時數沒有設定分秒那麼分秒預設是 0
<?php
$xmasThisYear = Carbon::createFromDate(null, 12, 25); // Year defaults to current year
$Y2K = Carbon::create(2000, 1, 1, 0, 0, 0);
$alsoY2K = Carbon::create(1999, 12, 31, 24);
$noonLondonTz = Carbon::createFromTime(12, 0, 0, 'Europe/London');
// A two digit minute could not be found
try { Carbon::create(1975, 5, 21, 22, -2, 0); } catch(InvalidArgumentException $x) { echo $x->getMessage(); }
copy() 方法可以copy一個已經存在的 Carbon 例項。對copy生成例項進行修改並不會影響被copy物件的本身。
<?php
$dt = Carbon::now();
echo $dt->diffInYears($dt->copy()->addYear()); // 1
// $dt was unchanged and still holds the value of Carbon:now()
關於毫秒的一些處理。php自帶的 DateTime 類也可以設定毫秒,但是在進行日期的數學預算時並不會考慮毫秒。從 Carbon 1.12.0版本起,例項化、copy也能像 format() 方法一樣支援毫秒(PHP預設的只有 支援毫秒)。
<?php
$dt = Carbon::parse('1975-05-21 22:23:00.123456');
echo $dt->micro; // 123456
echo $dt->copy()->micro; // 123456
…等等…
Carbon的一些使用
$knownDate = Carbon::create(2001, 5, 21, 12); // create testing date
Carbon::setTestNow($knownDate); // set the mock
echo new Carbon('tomorrow'); // 2001-05-22 00:00:00 ... notice the time !
echo new Carbon('yesterday'); // 2001-05-20 00:00:00
echo new Carbon('next wednesday'); // 2001-05-23 00:00:00
echo new Carbon('last friday'); // 2001-05-18 00:00:00
echo new Carbon('this thursday'); // 2001-05-24 00:00:00
Carbon::setTestNow();
以下是當前支援的時間轉換字
- this
- net
- last
- this
- next
- last
- tomorrow
- yesterday
- “+”
- “-”
- first
- last
- ago
//1、基本應用
$now = Carbon::now(); //2018-12-14 14:13:16
$today = Carbon::today(); //2018-12-14 00:00:00
$tomorrow = Carbon::tomorrow(); //2018-12-15 00:00:00
$yesterday = Carbon::yesterday(); //2018-12-13 00:00:00
//2、判斷是否是某一天(2018-12-14(週五)舉例)
$now = Carbon::now();
var_dump($now->isWeekend());//false 因為週五不是週末
var_dump($now->isWeekday());//true 因為週五是工作日
var_dump($now->isFriday());//true 因為今天是週五
$now->isToday();
$now->isTomorrow();
$now->isFuture();
$now->isPast();
//3、建立某一天的carbon物件並且進行加減計算
$date = Carbon::create(2016, 12, 25, 0, 0, 0);//2016-12-25 00:00:00
$next_year=$date->addYears(2);//2018-12-25 00:00:00
$past_year=$date->subYears(2);//2014-12-25 00:00:00
$next_month=$date->addMonths(2);//2017-02-25 00:00:00
$past_month=$date->subMonths(2);//2016-10-25 00:00:00
$next_day=$date->addDays(2);//2016-12-27 00:00:00
$past_day=$date->subDays(2);//2016-12-23 00:00:00
...更有addWeekdays()、addWeeks()、addHours()等方法
//4、將carbon物件轉換成string型別
$dt = Carbon::create(1975, 12, 25, 14, 15, 16);
echo $dt->toDateString(); // 1975-12-25
echo $dt->toFormattedDateString(); // Dec 25, 1975
echo $dt->toTimeString(); // 14:15:16
echo $dt->toDateTimeString(); // 1975-12-25 14:15:16
echo $dt->toDayDateTimeString(); // Thu, Dec 25, 1975 2:15 PM
//5、兩個時間的比較
$first = Carbon::create(2018, 12, 25, 0, 0, 0);
$second = Carbon::create(2016, 12, 25, 0, 0, 0);
var_dump($first->eq($second));
var_dump($first->ne($second));
var_dump($first->gt($second));
var_dump($first->gte($second));
var_dump($first->lt($second));
var_dump($first->lte($second));
//6、簡單的周月
$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfDay(); // 2012-01-31 00:00:00
$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfDay(); // 2012-01-31 23:59:59
$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfMonth(); // 2012-01-01 00:00:00
$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfMonth(); // 2012-01-31 23:59:59
上面介紹的是一些基本的Carbon使用。Carbon最大的特點就是靈活、人性化。
更多使用方法,參閱:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/200/viewspace-2818668/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP carbon :日期解析 Carbon::parsePHP
- [工具]PHP 中的日期時間處理利器 – CarbonPHP
- carbon-一個能生成漂亮的程式碼截圖工具
- PHP轉Go系列 | Carbon 時間處理工具的使用姿勢PHPGo
- Mac硬碟備份遷移資料工具:Carbon Copy Cloner 簡稱CCCMac硬碟
- Carbon 類常用函式函式
- Carbon DateTime::__construct () 為什麼?Struct
- Carbon中文使用手冊(下)
- Java併發工具篇Java
- Mongodb安裝篇+視覺化工具篇MongoDB視覺化
- 測試提效篇: 個人工具篇
- carbon——Laravel 內建Carbon庫的Golang實現版本,phper2goer的福利LaravelGolangPHP
- 日期時間處理包 Carbon
- 工具篇---xcode外掛使用XCode
- [IDE工具篇]Vim命令合集IDE
- iOS逆向工程 iOS工具篇iOS
- 【linux學習--工具篇】串列埠除錯工具Linux串列埠除錯
- 實用工具(銳捷雲桌面篇)-Halo工具
- 工具篇:介紹幾個好用的guava工具類Guava
- Laravel日期時間處理包 CarbonLaravel
- 效能優化篇 - Performance(工具 & api)優化ORMAPI
- ThinkPad X1 Carbon 2020值得買嗎?ThinkPad X1 Carbon 2020筆記本全面評測ThinkPad筆記
- 實用工具(銳捷智慧教室篇)-E-Wit工具
- 【工具篇】最流行的Web漏洞掃描工具推薦!Web
- iOS逆向之旅(進階篇) — 工具(LLDB)iOSLLDB
- 工具篇---Chrome瀏覽器快捷鍵Chrome瀏覽器
- 二、人工智慧講義(工具篇)人工智慧
- 《MySQL 進階篇》十四:效能分析工具MySql
- 【工具篇】git常用命令分享Git
- 實用工具(銳捷睿易篇)
- 前端面試資料整理【工具篇】前端面試
- go-carbon 1.1.0版本釋出了,php carbon時間處理庫的golang版,增加對gorm的支援PHPGolangORM
- Laravel中使用Carbon時間類生成日曆Laravel
- go-carbon 1.3.8 版本釋出,新增ToXXXStringWithTimezone方法Go
- 【軟體篇:suy網路工具包】
- 工具篇 | 淺談測試那些恩怨情仇
- React + Redux 效能優化(二)工具篇: ImmutablejsReactRedux優化JS
- 實用工具(銳捷無線篇)-WIS