值得了解的PHP日期时间处理扩展包:Carbon
本篇文章给大家推荐一个扩展包:Carbon,PHP 中日期 / 时间处理,你只需要这个扩展包就够了!
在 PHP 中使用日期和时间并不是容易或清晰的任务。我们必须处理 strtotime
,格式化问题,大量计算等等。
这个漂亮的包叫做 Carbon 可以帮助在 PHP 开发中处理日期/时间变得更加简单、更语义化,从而使得我们的代码更容易阅读和维护。
Carbon
Carbon 是由 Brian Nesbit 开发的一个包,它扩展了 PHP 自己的 DateTime 类。
它提供了一些很好的功能来处理 PHP 中的日期,特别是诸如:
- 处理时区
- 轻松获取当前时间
- 将 datetime 转换成可读的内容
- 将英语短语解析成 datetime (first day of January 2016)
- 日期的加减 (+ 2 weeks, -6 months)
- 处理日期的语义方法
所有的这些都带来了一个非常有用的包,使得这些在 PHP 中处理时间非常容易。
设置
为了使用 Carbon ,你需要从 Carbon
命名空间中导入 Carbon 。幸运的是,在 Laravel 中已经包括了 Carbon ,所以不需要和 Composer 一起添加。
当我们需要使用 Carbon 的时候,我们可以这样导入它:
<?php use Carbon\Carbon;
在导入之后,让我们看看我们可以用这个很棒的包做一些很酷的事情。
获取特定的日期/时间
// 获取当前时间 - 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'); // 设定一个特定的时区 - 2016-01-01 00:00:00 $newYearPST = new Carbon('first day of January 2016', 'America\Pacific');
除了快速定义日期/时间方法之外,Carbon 也可以让我们从特定数量的参数中创建时间。
Carbon::createFromDate($year, $month, $day, $tz); Carbon::createFromTime($hour, $minute, $second, $tz); Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
当你以一种通常不被 Carbon 识别的格式获得某种日期或时间时,这些是非常有用的。如果你为任何一个参数传递 null
值,则它默认会使用当前日期/时间传递 。
操作日期/时间
抓取日期/时间并不是你在处理日期时唯一要做的事情。你经常需要操作日期或时间。
例如,当为一个用户创建一个试用期时,你将希望试用期在一定时间后过期。假设我们有 30 天的试用期。我们可以用 add
和 subtract
很容易的计算出时间。
在这段试用期内,我们会:
// 获取当前时间 $current = Carbon::now(); // 添加 30 天到当前时间 $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:00
Getters and Setters
另外一种快速操作或读取时间的方法是使用可用的 getters 和 setters 。
$dt = Carbon::now(); // 设置一些参数 $dt->year = 2015; $dt->month = 04; $dt->day = 21; $dt->hour = 22; $dt->minute = 32; $dt->second = 5; // 获取一些参数 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()
方法。我们可以方便的为达到我们的目的去进行格式化。在这种情况下,我们得到了一个日期时间字符串。
$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 // ……当然 format() 也可以这样用 echo $dt->format('l jS \\of F Y h:i:s A'); // Saturday 19th of December 2015 10:10:16 AM
相对时间
通过 diff()
方法可以很容易的显示相对时间。
例如,我们有一篇博客,并且我们想显示它是在 三小时 前发布的。可以利用这些方法。
求时间差
这些方法用于求两个时间的时间差。
$current = Carbon::now(); $dt = Carbon::now(); $dt = $dt->subHours(6); echo $dt->diffInHours($current, false); // 6,相当于 $current-$dt,这里的false表示结果不取绝对值,默认是值是true echo $current->diffInHours($dt, false); // -6,相当于 $dt-$current $future = $current->addMonth(); $past = $current->subMonths(2); echo $current->diffInDays($future); // 31 echo $current->diffInDays($past); // -62
显示人类容易阅读的时间差
在过去的几年,显示相对时间变得越来越流行。在 Twitter 和 Facebook 等社交网络中经常可以看到。
例如,将时间显示为 3 小时前 比显示 上午 8:12,更适合人类阅读。
这些方法被用于计算时间差,并转换为人类可阅读的格式。
这里有四种表达时间差的方式:
- 将一个过去的时间和现在做比较:
- 1 小时前
- 5 个月前
- 将一个未来的时间和现在做比较:
- 1 小时后
- 5 个月后
- 将一个过去的时间和另一个时间做比较:
- 1 小时前
- 5 小时前
- 将一个未来的时间和另一个做比较:
- 1 小时后
- 5 小时后
$dt = Carbon::now(); $past = $dt->subMonth(); $future = $dt->addMonth(); echo $dt->subDays(10)->diffForHumans(); // 10 天前 echo $dt->diffForHumans($past); // 1 个月前 echo $dt->diffForHumans($future); // 1 个月前
总结
Carbon 能做的远远不止这些。请务必查看 Carbon 官方文档。希望这能帮助你在 PHP 中更容易的使用日期 / 时间并加快开发效率!
推荐学习:《PHP视频教程》

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。
