摘要:文章轉(zhuǎn)自在中使用日期和時(shí)間并不是容易或清晰的任務(wù)。操作日期時(shí)間抓取日期時(shí)間并不是你在處理日期時(shí)唯一要做的事情。格式化在上面的示例中,你可能注意到了方法。顯示人類容易閱讀的時(shí)間差在過去的幾年,顯示相對(duì)時(shí)間變得越來越流行。
文章轉(zhuǎn)自:https://learnku.com/php/t/26998
在 PHP 中使用日期和時(shí)間并不是容易或清晰的任務(wù)。我們必須處理 strtotime ,格式化問題,大量計(jì)算等等。
這個(gè)漂亮的包叫做 Carbon 可以幫助在 PHP 開發(fā)中處理日期/時(shí)間變得更加簡(jiǎn)單、更語義化,從而使得我們的代碼更容易閱讀和維護(hù)。
CarbonCarbon 是由 Brian Nesbit 開發(fā)的一個(gè)包,它擴(kuò)展了 PHP 自己的 DateTime 類。
它提供了一些很好的功能來處理 PHP 中的日期,特別是諸如:
處理時(shí)區(qū)
輕松獲取當(dāng)前時(shí)間
將 datetime 轉(zhuǎn)換成可讀的內(nèi)容
將英語短語解析成 datetime (first day of January 2016)
日期的加減 (+ 2 weeks,?-6 months)
處理日期的語義方法
所有的這些都帶來了一個(gè)非常有用的包,使得這些在 PHP 中處理時(shí)間非常容易。
設(shè)置為了使用 Carbon ,你需要從 Carbon 命名空間中導(dǎo)入 Carbon 。幸運(yùn)的是,在 Laravel 中已經(jīng)包括了 Carbon ,所以不需要和 Composer 一起添加。
當(dāng)我們需要使用 Carbon 的時(shí)候,我們可以這樣導(dǎo)入它:
在導(dǎo)入之后,讓我們看看我們可以用這個(gè)很棒的包做一些很酷的事情。
獲取特定的日期/時(shí)間// 獲取當(dāng)前時(shí)間 - 2015-12-19 10:10:54 $current = Carbon::now(); $current = new Carbon(); // 獲取今天 - 2015-12-19 00:00:00 $today = Carbon::today(); // 獲取昨天 - 2015-12-18 00:00:00 $yesterday = Carbon::yesterday(); // 獲取明天 - 2015-12-20 00:00:00 $tomorrow = Carbon::tomorrow(); // 解析特定字符串 - 2016-01-01 00:00:00 $newYear = new Carbon("first day of January 2016"); // 設(shè)定一個(gè)特定的時(shí)區(qū) - 2016-01-01 00:00:00 $newYearPST = new Carbon("first day of January 2016", "AmericaPacific");創(chuàng)造具有更細(xì)粒度控制的日期除了快速定義日期/時(shí)間方法之外,Carbon 也可以讓我們從特定數(shù)量的參數(shù)中創(chuàng)建時(shí)間。
Carbon::createFromDate($year, $month, $day, $tz); Carbon::createFromTime($hour, $minute, $second, $tz); Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);當(dāng)你以一種通常不被 Carbon 識(shí)別的格式獲得某種日期或時(shí)間時(shí),這些是非常有用的。如果你為任何一個(gè)參數(shù)傳遞 null 值,則它默認(rèn)會(huì)使用當(dāng)前日期/時(shí)間傳遞 。
操作日期/時(shí)間抓取日期/時(shí)間并不是你在處理日期時(shí)唯一要做的事情。你經(jīng)常需要操作日期或時(shí)間。
例如,當(dāng)為一個(gè)用戶創(chuàng)建一個(gè)試用期時(shí),你將希望試用期在一定時(shí)間后過期。假設(shè)我們有 30 天的試用期。我們可以用 add 和 subtract 很容易的計(jì)算出時(shí)間。
在這段試用期內(nèi),我們會(huì):
// 獲取當(dāng)前時(shí)間 $current = Carbon::now(); // 添加 30 天到當(dāng)前時(shí)間 $trialExpires = $current->addDays(30);從 Carbon 文檔 中,我們可以找到一些其他的 add() 和 sub() 方法:
$dt = Carbon::create(2012, 1, 31, 0); echo $dt->toDateTimeString(); // 2012-01-31 00:00:00 echo $dt->addYears(5); // 2017-01-31 00:00:00 echo $dt->addYear(); // 2018-01-31 00:00:00 echo $dt->subYear(); // 2017-01-31 00:00:00 echo $dt->subYears(5); // 2012-01-31 00:00:00 echo $dt->addMonths(60); // 2017-01-31 00:00:00 echo $dt->addMonth(); // 2017-03-03 00:00:00 equivalent of $dt->month($dt->month + 1); so it wraps echo $dt->subMonth(); // 2017-02-03 00:00:00 echo $dt->subMonths(60); // 2012-02-03 00:00:00 echo $dt->addDays(29); // 2012-03-03 00:00:00 echo $dt->addDay(); // 2012-03-04 00:00:00 echo $dt->subDay(); // 2012-03-03 00:00:00 echo $dt->subDays(29); // 2012-02-03 00:00:00 echo $dt->addWeekdays(4); // 2012-02-09 00:00:00 echo $dt->addWeekday(); // 2012-02-10 00:00:00 echo $dt->subWeekday(); // 2012-02-09 00:00:00 echo $dt->subWeekdays(4); // 2012-02-03 00:00:00 echo $dt->addWeeks(3); // 2012-02-24 00:00:00 echo $dt->addWeek(); // 2012-03-02 00:00:00 echo $dt->subWeek(); // 2012-02-24 00:00:00 echo $dt->subWeeks(3); // 2012-02-03 00:00:00 echo $dt->addHours(24); // 2012-02-04 00:00:00 echo $dt->addHour(); // 2012-02-04 01:00:00 echo $dt->subHour(); // 2012-02-04 00:00:00 echo $dt->subHours(24); // 2012-02-03 00:00:00 echo $dt->addMinutes(61); // 2012-02-03 01:01:00 echo $dt->addMinute(); // 2012-02-03 01:02:00 echo $dt->subMinute(); // 2012-02-03 01:01:00 echo $dt->subMinutes(61); // 2012-02-03 00:00:00 echo $dt->addSeconds(61); // 2012-02-03 00:01:01 echo $dt->addSecond(); // 2012-02-03 00:01:02 echo $dt->subSecond(); // 2012-02-03 00:01:01 echo $dt->subSeconds(61); // 2012-02-03 00:00:00Getters and Setters另外一種快速操作或讀取時(shí)間的方法是使用可用的 getters 和 serrers 。
$dt = Carbon::now(); // 設(shè)置一些參數(shù) $dt->year = 2015; $dt->month = 04; $dt->day = 21; $dt->hour = 22; $dt->minute = 32; $dt->second = 5; // 獲取一些參數(shù) var_dump($dt->year); var_dump($dt->month); var_dump($dt->day); var_dump($dt->hour); var_dump($dt->second); var_dump($dt->dayOfWeek); var_dump($dt->dayOfYear); var_dump($dt->weekOfMonth); var_dump($dt->daysInMonth);我們甚至還可以把一些 setter 串在一起。
$dt = Carbon::now(); $dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString(); $dt->setDate(1975, 5, 21)->setTime(22, 32, 5)->toDateTimeString(); $dt->setDateTime(1975, 5, 21, 22, 32, 5)->toDateTimeString();格式化在上面的示例中,你可能注意到了 ->toDateTimeString() 方法。我們可以方便的為達(dá)到我們的目的去進(jìn)行格式化。在這種情況下,我們得到了一個(gè)日期時(shí)間字符串。
$dt = Carbon::now(); echo $dt->toDateString(); // 2015-12-19 echo $dt->toFormattedDateString(); // Dec 19, 2015 echo $dt->toTimeString(); // 10:10:16 echo $dt->toDateTimeString(); // 2015-12-19 10:10:16 echo $dt->toDayDateTimeString(); // Sat, Dec 19, 2015 10:10 AM // ……當(dāng)然 format() 也可以這樣用 echo $dt->format("l jS of F Y h:i:s A"); // Saturday 19th of December 2015 10:10:16 AM相對(duì)時(shí)間通過 diff() 方法可以很容易的顯示相對(duì)時(shí)間。
例如,我們有一篇博客,并且我們想顯示它是在 三小時(shí) 前發(fā)布的。可以利用這些方法。
求時(shí)間差這些方法用于求兩個(gè)時(shí)間的時(shí)間差。
$current = Carbon::now(); $dt = Carbon::now(); $dt = $dt->subHours(6); echo $dt->diffInHours($current); // -6 echo $current->diffInHours($dt); // 6 $future = $current->addMonth(); $past = $current->subMonths(2); echo $current->diffInDays($future); // 31 echo $current->diffInDays($past); // -62顯示人類容易閱讀的時(shí)間差在過去的幾年,顯示相對(duì)時(shí)間變得越來越流行。在 Twitter 和 Facebook 等社交網(wǎng)絡(luò)中經(jīng)??梢钥吹健?/p>
例如,將時(shí)間顯示為 3 小時(shí)前 比顯示 上午 8:12,更適合人類閱讀。
這些方法被用于計(jì)算時(shí)間差,并轉(zhuǎn)換為人類可閱讀的格式。
這里有四種表達(dá)時(shí)間差的方式:
將一個(gè)過去的時(shí)間和現(xiàn)在做比較:
1 小時(shí)前
5 個(gè)月前
將一個(gè)未來的時(shí)間和現(xiàn)在做比較:
1 小時(shí)后
5 個(gè)月后
將一個(gè)過去的時(shí)間和另一個(gè)時(shí)間做比較:
1 小時(shí)前
5 小時(shí)前
將一個(gè)未來的時(shí)間和另一個(gè)做比較:
1 小時(shí)后
5 小時(shí)后
$dt = Carbon::now(); $past = $dt->subMonth(); $future = $dt->addMonth(); echo $dt->subDays(10)->diffForHumans(); // 10 天前 echo $dt->diffForHumans($past); // 1 個(gè)月前 echo $dt->diffForHumans($future); // 1 個(gè)月前總結(jié)Carbon 能做的遠(yuǎn)遠(yuǎn)不止這些。請(qǐng)務(wù)必查看?Carbon 官方文檔。希望這能幫助你在 PHP 中更容易的使用日期 / 時(shí)間并加快開發(fā)效率!
文章轉(zhuǎn)自:https://learnku.com/php/t/26998
更多文章:https://learnku.com/laravel/c...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31232.html
摘要:介紹是中很人性化的時(shí)間日期處理插件,擁有接近個(gè)。最大的特點(diǎn)就是靈活人性化。 Carbon介紹 Carbon是PHP中很人性化的時(shí)間日期處理插件,github擁有接近5000個(gè) star。github地址為:https://github.com/briannesbi... Carbon基本用法 //1、基本應(yīng)用 $now = Carbon::now(); ...
摘要:處理時(shí)區(qū)輕松獲取時(shí)間日期加減使用英語短語處理時(shí)間安裝使用安裝,。 A simple PHP API extension for DateTime. Carbon 使處理日期和時(shí)間更加簡(jiǎn)單。 處理時(shí)區(qū) 輕松獲取時(shí)間 日期加減 使用英語短語處理時(shí)間 ... 安裝 使用 composer 安裝,composer require nesbot/carbon。 在 composer.jso...
摘要:處理時(shí)區(qū)輕松獲取時(shí)間日期加減使用英語短語處理時(shí)間安裝使用安裝,。 A simple PHP API extension for DateTime. Carbon 使處理日期和時(shí)間更加簡(jiǎn)單。 處理時(shí)區(qū) 輕松獲取時(shí)間 日期加減 使用英語短語處理時(shí)間 ... 安裝 使用 composer 安裝,composer require nesbot/carbon。 在 composer.jso...
摘要:處理時(shí)區(qū)輕松獲取時(shí)間日期加減使用英語短語處理時(shí)間安裝使用安裝,。 A simple PHP API extension for DateTime. Carbon 使處理日期和時(shí)間更加簡(jiǎn)單。 處理時(shí)區(qū) 輕松獲取時(shí)間 日期加減 使用英語短語處理時(shí)間 ... 安裝 使用 composer 安裝,composer require nesbot/carbon。 在 composer.jso...
摘要:處理時(shí)區(qū)輕松獲取時(shí)間日期加減使用英語短語處理時(shí)間安裝使用安裝,。 A simple PHP API extension for DateTime. Carbon 使處理日期和時(shí)間更加簡(jiǎn)單。 處理時(shí)區(qū) 輕松獲取時(shí)間 日期加減 使用英語短語處理時(shí)間 ... 安裝 使用 composer 安裝,composer require nesbot/carbon。 在 composer.jso...
閱讀 4014·2023-04-26 02:13
閱讀 2257·2021-11-08 13:13
閱讀 2743·2021-10-11 10:59
閱讀 1742·2021-09-03 00:23
閱讀 1314·2019-08-30 15:53
閱讀 2291·2019-08-28 18:22
閱讀 3060·2019-08-26 10:45
閱讀 743·2019-08-23 17:58