Laravel中日期時間處理包Carbon
處理日期和時間需要考慮很多事情,例如日期的格式、時區、閏年和天數各異的月份,自己處理太容易出錯了,下面這篇文章主要給大家介紹了關於在Laravel中日期時間處理包Carbon的簡單使用,需要的朋友可以參考下。
前言
我們大家在寫PHP 應用程式時經常需要處理日期和時間,這篇文章帶你了解一下Carbon – 繼承自PHP DateTime 類別的API 擴展,它使得處理日期和時間更加簡單。
Laravel 中預設使用的時間處理類別就是 Carbon。
<?php namespace Carbon; class Carbon extends \DateTime { // code here }
你可以在 Carbon 命名空間的 Carbon 類別中看到上面宣告的程式碼片段。
安裝
可以透過Composer 來安裝Carbon:
composer require nesbot/carbon
##PS: 由於Laravel 專案已預設安裝了此包,所以不需要再次執行上面的命令。
使用
use Carbon\Carbon;
取得目前時間
<?php echo Carbon::now(); //2016-10-14 20:21:20 ?>
// 直接使用字符串 echo Carbon::now('Europe/London'); //2016-10-14 20:21:20 // 或者 echo Carbon::now(new DateTimeZone('Europe/London'));
#now() 外,也提供了
today() 、
tomorrow() 、
yesterday() 等靜態函數,不過,它們的時間都是00:00:00 :
echo Carbon::now(); // 2016-10-14 15:18:34 echo Carbon::today(); // 2016-10-14 00:00:00 echo Carbon::tomorrow('Europe/London'); // 2016-10-14 00:00:00 echo Carbon::yesterday(); // 2016-10-14 00:00:00
Carbon {#179 ▼ +"date": "2016-06-14 00:00:00.000000" +"timezone_type": 3 +"timezone": "UTC" }
echo Carbon::today()->toDateTimeString(); echo Carbon::yesterday()->toDateTimeString(); echo Carbon::tomorrow()->toDateTimeString();
日期類型轉為字串
echo Carbon::now()->toDateString(); //2016-10-14 echo Carbon::now()->toDateTimeString(); //2016-10-14 20:22:50
日期解析
##你也可以用parse 方法解析任何順序和類型的日期(結果為Carbon 類型的日期時間物件):
echo Carbon::parse('2016-10-15')->toDateTimeString(); //2016-10-15 00:00:00 echo Carbon::parse('2016-10-15')->toDateTimeString(); //2016-10-15 00:00:00 echo Carbon::parse('2016-10-15 00:10:25')->toDateTimeString(); //2016-10-15 00:10:25 echo Carbon::parse('today')->toDateTimeString(); //2016-10-15 00:00:00 echo Carbon::parse('yesterday')->toDateTimeString(); //2016-10-14 00:00:00 echo Carbon::parse('tomorrow')->toDateTimeString(); //2016-10-16 00:00:00 echo Carbon::parse('2 days ago')->toDateTimeString(); //2016-10-13 20:49:53 echo Carbon::parse('+3 days')->toDateTimeString(); //2016-10-18 20:49:53 echo Carbon::parse('+2 weeks')->toDateTimeString(); //2016-10-29 20:49:53 echo Carbon::parse('+4 months')->toDateTimeString(); //2017-02-15 20:49:53 echo Carbon::parse('-1 year')->toDateTimeString(); //2015-10-15 20:49:53 echo Carbon::parse('next wednesday')->toDateTimeString(); //2016-10-19 00:00:00 echo Carbon::parse('last friday')->toDateTimeString(); //2016-10-14 00:00:00
你也可以使用單獨的年月日來建構日期:
$year = '2015'; $month = '04'; $day = '12'; echo Carbon::createFromDate($year, $month, $day); //2015-04-12 20:55:59 $hour = '02'; $minute = '15': $second = '30'; echo Carbon::create($year, $month, $day, $hour, $minute, $second); //2015-04-12 02:15:30 echo Carbon::createFromDate(null, 12, 25); // 年默认为当前年份
此外,還可以傳遞一個有效的時區作為最後一個參數。
日期操作
日期操作可以透過 add (增加)或 sub (減去)跟上要增加或減去的單位來完成。例如,你想為一個日期增加指定的天數,你可以使用 addDays 方法。另外也提供了一個 modify 方法,參數格式為 + 或 - 跟上值及單位。所以,如果你想為目前日期增加一年,你可以傳遞+1 year:
echo Carbon::now()->addDays(25); //2016-11-09 14:00:01 echo Carbon::now()->addWeeks(3); //2016-11-05 14:00:01 echo Carbon::now()->addHours(25); //2016-10-16 15:00:01 echo Carbon::now()->subHours(2); //2016-10-15 12:00:01 echo Carbon::now()->addHours(2)->addMinutes(12); //2016-10-15 16:12:01 echo Carbon::now()->modify('+15 days'); //2016-10-30 14:00:01 echo Carbon::now()->modify('-2 days'); //2016-10-13 14:00:01
在Carbon 中你可以使用下面的方法來比較日期:
- min –傳回最小日期。
- max – 傳回最大日期。
- eq – 判斷兩個日期是否相等。
- gt – 判斷第一個日期是否比第二個日期大。
- lt – 判斷第一個日期是否比第二個日期小。
- gte – 判斷第一個日期是否大於等於第二個日期。
- lte – 判斷第一個日期是否小於等於第二個日期。
echo Carbon::now()->tzName; // America/Toronto $first = Carbon::create(2012, 9, 5, 23, 26, 11); $second = Carbon::create(2012, 9, 5, 20, 26, 11, 'America/Vancouver'); echo $first->toDateTimeString(); // 2012-09-05 23:26:11 echo $first->tzName; // America/Toronto echo $second->toDateTimeString(); // 2012-09-05 20:26:11 echo $second->tzName; // America/Vancouver var_dump($first->eq($second)); // bool(true) var_dump($first->ne($second)); // bool(false) var_dump($first->gt($second)); // bool(false) var_dump($first->gte($second)); // bool(true) var_dump($first->lt($second)); // bool(false) var_dump($first->lte($second)); // bool(true) $first->setDateTime(2012, 1, 1, 0, 0, 0); $second->setDateTime(2012, 1, 1, 0, 0, 0); // Remember tz is 'America/Vancouver' var_dump($first->eq($second)); // bool(false) var_dump($first->ne($second)); // bool(true) var_dump($first->gt($second)); // bool(false) var_dump($first->gte($second)); // bool(false) var_dump($first->lt($second)); // bool(true) var_dump($first->lte($second)); // bool(true)
登入後複製要判斷一個日期是否介於兩個日期之間,可以使用between() 方法,第三個可選參數指定比較是否可以相等,預設為true:
$first = Carbon::create(2012, 9, 5, 1); $second = Carbon::create(2012, 9, 5, 5); var_dump(Carbon::create(2012, 9, 5, 3)->between($first, $second)); // bool(true) var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second)); // bool(true) var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second, false)); // bool(false)
此外還提供了一些輔助方法,你可以從它們的名字中明白其含義:
$dt = Carbon::now(); $dt->isWeekday(); $dt->isWeekend(); $dt->isYesterday(); $dt->isToday(); $dt->isTomorrow(); $dt->isFuture(); $dt->isPast(); $dt->isLeapYear(); $dt->isSameDay(Carbon::now()); $born = Carbon::createFromDate(1987, 4, 23); $noCake = Carbon::createFromDate(2014, 9, 26); $yesCake = Carbon::createFromDate(2014, 4, 23); $overTheHill = Carbon::now()->subYears(50); var_dump($born->isBirthday($noCake)); // bool(false) var_dump($born->isBirthday($yesCake)); // bool(true) var_dump($overTheHill->isBirthday()); // bool(true) -> default compare it to today!
「一個月前」比「30 天前」更容易閱讀,許多日期庫都提供了這個常見的功能,日期被解析後,有以下四種可能性:
1、當比較的時間超過當前預設時間
- 1天前
- #5月前
- 2、當用將來的時間與目前預設時間比較
- 1小時距現在
- 5月距現在
- #3、當比較的值超過另一個值
- 1小時前
- 5月前
- 4、當比較的值在另一個值之後
- 1小時後
- 5月後
- 你可以把第二個參數設為true 來刪除「前」、「距現在」等修飾語:
。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>echo Carbon::now()->subDays(5)->diffForHumans(); // 5天前
echo Carbon::now()->diffForHumans(Carbon::now()->subYear()); // 1年后
$dt = Carbon::createFromDate(2011, 8, 1);
echo $dt->diffForHumans($dt->copy()->addMonth()); // 1月前
echo $dt->diffForHumans($dt->copy()->subMonth()); // 11月后
echo Carbon::now()->addSeconds(5)->diffForHumans(); // 5秒距现在
echo Carbon::now()->subDays(24)->diffForHumans(); // 3周前
echo Carbon::now()->subDays(24)->diffForHumans(null, true); // 3周</pre><div class="contentsignin">登入後複製</div></div>
本地化# 可以在 app/Providers/AppServiceProvider.php 的 设置好之后,在输出时间的地方调用: 类似的格式即可。 更多 Carbon 操作,可查看文档。 以上是Laravel中日期時間處理包Carbon的詳細內容。更多資訊請關注PHP中文網其他相關文章!boot()
方法中添加下面的代码来设置全局本地化:public function boot()
{
\Carbon\Carbon::setLocale('zh');
}
$article->created_at->diffForHumans();

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel9和CodeIgniter4的最新版本提供了更新的功能和改進。 Laravel9採用MVC架構,提供資料庫遷移、驗證及模板引擎等功能。 CodeIgniter4採用HMVC架構,提供路由、ORM和快取。在性能方面,Laravel9的基於服務提供者設計模式和CodeIgniter4的輕量級框架使其具有出色的性能。在實際應用中,Laravel9適用於需要靈活性和強大功能的複雜項目,而CodeIgniter4適用於快速開發和小型應用程式。

比較Laravel和CodeIgniter的資料處理能力:ORM:Laravel使用EloquentORM,提供類別物件關係映射,而CodeIgniter使用ActiveRecord,將資料庫模型表示為PHP類別的子類別。查詢建構器:Laravel具有靈活的鍊式查詢API,而CodeIgniter的查詢建構器更簡單,基於陣列。資料驗證:Laravel提供了一個Validator類,支援自訂驗證規則,而CodeIgniter的驗證功能內建較少,需要手動編碼自訂規則。實戰案例:用戶註冊範例展示了Lar

對於初學者來說,CodeIgniter的學習曲線更平緩,功能較少,但涵蓋了基本需求。 Laravel提供了更廣泛的功能集,但學習曲線稍陡。在性能方面,Laravel和CodeIgniter都表現出色。 Laravel有更廣泛的文件和活躍的社群支持,而CodeIgniter更簡單、輕量級,具有強大的安全功能。在建立部落格應用程式的實戰案例中,Laravel的EloquentORM簡化了資料操作,而CodeIgniter需要更多的手動配置。

在選擇大型專案框架時,Laravel和CodeIgniter各有優勢。 Laravel針對企業級應用程式而設計,提供模組化設計、相依性注入和強大的功能集。 CodeIgniter是一款輕量級框架,更適合小型到中型項目,強調速度和易用性。對於具有複雜需求和大量用戶的大型項目,Laravel的強大功能和可擴展性更為合適。而對於簡單專案或資源有限的情況下,CodeIgniter的輕量級和快速開發能力則較為理想。

Laravel - Artisan 指令 - Laravel 5.7 提供了處理和測試新指令的新方法。它包括測試 artisan 命令的新功能,下面提到了演示?

對於小型項目,Laravel適用於大型項目,需要強大的功能和安全性。 CodeIgniter適用於非常小的項目,需要輕量級和易用性。

比較了Laravel的Blade和CodeIgniter的Twig模板引擎,根據專案需求和個人偏好進行選擇:Blade基於MVC語法,鼓勵良好程式碼組織和模板繼承。 Twig是第三方函式庫,提供靈活語法、強大過濾器、擴充支援和安全沙箱。

Laravel - 分頁自訂 - Laravel 包含分頁功能,可協助使用者或開發人員包含分頁功能。 Laravel 分頁器與查詢產生器和 Eloquent ORM 整合。自動分頁方法
