Rumah pembangunan bahagian belakang tutorial php Laravel中如何使用日期时间处理包Carbon的实例

Laravel中如何使用日期时间处理包Carbon的实例

Sep 23, 2017 am 09:27 AM
laravel tarikh masa

处理日期和时间需要考虑很多事情,例如日期的格式、时区、闰年和天数各异的月份,自己处理太容易出错了,下面这篇文章主要给大家介绍了关于在Laravel中日期时间处理包Carbon的简单使用,需要的朋友可以参考下。

前言

我们大家在编写 PHP 应用时经常需要处理日期和时间,这篇文章带你了解一下 Carbon – 继承自 PHP DateTime 类的 API 扩展,它使得处理日期和时间更加简单。

Laravel 中默认使用的时间处理类就是 Carbon。


<?php
namespace Carbon;
 
class Carbon extends \DateTime
{
 // code here
}
Salin selepas log masuk

你可以在 Carbon 命名空间的 Carbon 类中看到上面声明的代码片段。

安装

可以通过 Composer 来安装 Carbon:


composer require nesbot/carbon
Salin selepas log masuk

PS:由于 Laravel 项目已默认安装了此包,所以不需要再次执行上面的命令。

使用

你需要通过命名空间导入 Carbon 来使用,而不需每次都提供完整的名称。


use Carbon\Carbon;
Salin selepas log masuk

获取当前时间

可以同 now() 方法获取当前的日期和时间。如果你不指定参数,它会使用 PHP 配置中的时区:


<?php
echo Carbon::now(); //2016-10-14 20:21:20
?>
Salin selepas log masuk

如果你想使用一个不同的时区,你需要传递一个有效的时区作为参数:


// 直接使用字符串
echo Carbon::now(&#39;Europe/London&#39;); //2016-10-14 20:21:20
// 或者
echo Carbon::now(new DateTimeZone(&#39;Europe/London&#39;));
Salin selepas log masuk

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(&#39;Europe/London&#39;);       // 2016-10-14 00:00:00
echo Carbon::yesterday();       // 2016-10-14 00:00:00
Salin selepas log masuk

以上输出结果其实是一个 Carbon 类型的日期时间对象:


Carbon {#179 ▼
 +"date": "2016-06-14 00:00:00.000000"
 +"timezone_type": 3
 +"timezone": "UTC"
}
Salin selepas log masuk

要想获取字符串类型的日期,可以使用下面的代码:


echo Carbon::today()->toDateTimeString();
echo Carbon::yesterday()->toDateTimeString();
echo Carbon::tomorrow()->toDateTimeString();
Salin selepas log masuk

日期类型转为字符串

如上所述,默认情况下,Carbon 的方法返回的为一个日期时间对象。虽然它是一个对象,但是你却可以直接使用 echo 输出结果,因为有 __toString 魔术方法。但是如果你想把它转为字符串,可以使用 toDateString 或 toDateTimeString 方法:


echo Carbon::now()->toDateString(); //2016-10-14
echo Carbon::now()->toDateTimeString(); //2016-10-14 20:22:50
Salin selepas log masuk

日期解析

你还可以使用 parse 方法解析任何顺序和类型的日期(结果为 Carbon 类型的日期时间对象):


echo Carbon::parse(&#39;2016-10-15&#39;)->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse(&#39;2016-10-15&#39;)->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse(&#39;2016-10-15 00:10:25&#39;)->toDateTimeString(); //2016-10-15 00:10:25
 
echo Carbon::parse(&#39;today&#39;)->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse(&#39;yesterday&#39;)->toDateTimeString(); //2016-10-14 00:00:00
echo Carbon::parse(&#39;tomorrow&#39;)->toDateTimeString(); //2016-10-16 00:00:00
echo Carbon::parse(&#39;2 days ago&#39;)->toDateTimeString(); //2016-10-13 20:49:53
echo Carbon::parse(&#39;+3 days&#39;)->toDateTimeString(); //2016-10-18 20:49:53
echo Carbon::parse(&#39;+2 weeks&#39;)->toDateTimeString(); //2016-10-29 20:49:53
echo Carbon::parse(&#39;+4 months&#39;)->toDateTimeString(); //2017-02-15 20:49:53
echo Carbon::parse(&#39;-1 year&#39;)->toDateTimeString(); //2015-10-15 20:49:53
echo Carbon::parse(&#39;next wednesday&#39;)->toDateTimeString(); //2016-10-19 00:00:00
echo Carbon::parse(&#39;last friday&#39;)->toDateTimeString(); //2016-10-14 00:00:00
Salin selepas log masuk

构造日期

你还可以使用单独的年月日来构造日期:


$year = &#39;2015&#39;;
$month = &#39;04&#39;;
$day = &#39;12&#39;;
 
echo Carbon::createFromDate($year, $month, $day); //2015-04-12 20:55:59
 
$hour = &#39;02&#39;;
$minute = &#39;15&#39;:
$second = &#39;30&#39;;
 
echo Carbon::create($year, $month, $day, $hour, $minute, $second); //2015-04-12 02:15:30
 
echo Carbon::createFromDate(null, 12, 25); // 年默认为当前年份
Salin selepas log masuk

此外,还可以传递一个有效的时区作为最后一个参数。

日期操作

日期操作可以通过 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(&#39;+15 days&#39;); //2016-10-30 14:00:01
echo Carbon::now()->modify(&#39;-2 days&#39;); //2016-10-13 14:00:01
Salin selepas log masuk

日期比较

在 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, &#39;America/Vancouver&#39;);
 
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 &#39;America/Vancouver&#39;
 
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)
Salin selepas log masuk

要判断一个日期是否介于两个日期之间,可以使用 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)
Salin selepas log masuk

此外还提供了一些辅助方法,你可以从它们的名字中明白其含义:


$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!
Salin selepas log masuk

diffForHumans

“一个月前”比“30 天前”更便于阅读,很多日期库都提供了这个常见的功能,日期被解析后,有下面四种可能性:

1、当比较的时间超过当前默认时间

  • 1天前

  • 5月前

2、当用将来的时间与当前默认时间比较

  • 1小时距现在

  • 5月距现在

3、当比较的值超过另一个值

  • 1小时前

  • 5月前

4、当比较的值在另一个值之后

  • 1小时后

  • 5月后

你可以把第二个参数设置为 true 来删除“前”、“距现在”等修饰语:diffForHumans(Carbon $other, true)


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周
Salin selepas log masuk

本地化

可以在 app/Providers/AppServiceProvider.php 的 boot() 方法中添加下面的代码来设置全局本地化:


public function boot()
{
  \Carbon\Carbon::setLocale(&#39;zh&#39;);
}
Salin selepas log masuk

设置好之后,在输出时间的地方调用:


$article->created_at->diffForHumans();
Salin selepas log masuk

类似的格式即可。

更多 Carbon 操作,可查看文档。

总结

Atas ialah kandungan terperinci Laravel中如何使用日期时间处理包Carbon的实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perbandingan versi terkini Laravel dan CodeIgniter Perbandingan versi terkini Laravel dan CodeIgniter Jun 05, 2024 pm 05:29 PM

Versi terkini Laravel 9 dan CodeIgniter 4 menyediakan ciri dan penambahbaikan yang dikemas kini. Laravel9 menggunakan seni bina MVC dan menyediakan fungsi seperti migrasi pangkalan data, pengesahan dan enjin templat. CodeIgniter4 menggunakan seni bina HMVC untuk menyediakan penghalaan, ORM dan caching. Dari segi prestasi, corak reka bentuk berasaskan pembekal perkhidmatan Laravel9 dan rangka kerja ringan CodeIgniter4 memberikannya prestasi cemerlang. Dalam aplikasi praktikal, Laravel9 sesuai untuk projek kompleks yang memerlukan fleksibiliti dan fungsi berkuasa, manakala CodeIgniter4 sesuai untuk pembangunan pesat dan aplikasi kecil.

Bagaimanakah keupayaan pemprosesan data dalam Laravel dan CodeIgniter dibandingkan? Bagaimanakah keupayaan pemprosesan data dalam Laravel dan CodeIgniter dibandingkan? Jun 01, 2024 pm 01:34 PM

Bandingkan keupayaan pemprosesan data Laravel dan CodeIgniter: ORM: Laravel menggunakan EloquentORM, yang menyediakan pemetaan hubungan kelas-objek, manakala CodeIgniter menggunakan ActiveRecord untuk mewakili model pangkalan data sebagai subkelas kelas PHP. Pembina pertanyaan: Laravel mempunyai API pertanyaan berantai yang fleksibel, manakala pembina pertanyaan CodeIgniter lebih ringkas dan berasaskan tatasusunan. Pengesahan data: Laravel menyediakan kelas Pengesah yang menyokong peraturan pengesahan tersuai, manakala CodeIgniter mempunyai kurang fungsi pengesahan terbina dalam dan memerlukan pengekodan manual peraturan tersuai. Kes praktikal: Contoh pendaftaran pengguna menunjukkan Lar

Mana satu yang lebih mesra pemula, Laravel atau CodeIgniter? Mana satu yang lebih mesra pemula, Laravel atau CodeIgniter? Jun 05, 2024 pm 07:50 PM

Untuk pemula, CodeIgniter mempunyai keluk pembelajaran yang lebih lembut dan ciri yang lebih sedikit, tetapi meliputi keperluan asas. Laravel menawarkan set ciri yang lebih luas tetapi mempunyai keluk pembelajaran yang lebih curam. Dari segi prestasi, kedua-dua Laravel dan CodeIgniter berprestasi baik. Laravel mempunyai dokumentasi yang lebih luas dan sokongan komuniti yang aktif, manakala CodeIgniter lebih ringkas, ringan dan mempunyai ciri keselamatan yang kukuh. Dalam kes praktikal membina aplikasi blog, EloquentORM Laravel memudahkan manipulasi data, manakala CodeIgniter memerlukan lebih banyak konfigurasi manual.

Laravel - Perintah Artisan Laravel - Perintah Artisan Aug 27, 2024 am 10:51 AM

Laravel - Perintah Artisan - Laravel 5.7 hadir dengan cara baharu untuk merawat dan menguji arahan baharu. Ia termasuk ciri baharu untuk menguji arahan artisan dan demonstrasi disebut di bawah?

Laravel vs CodeIgniter: Rangka kerja manakah yang lebih baik untuk projek besar? Laravel vs CodeIgniter: Rangka kerja manakah yang lebih baik untuk projek besar? Jun 04, 2024 am 09:09 AM

Apabila memilih rangka kerja untuk projek besar, Laravel dan CodeIgniter masing-masing mempunyai kelebihan mereka sendiri. Laravel direka untuk aplikasi peringkat perusahaan, menawarkan reka bentuk modular, suntikan pergantungan dan set ciri yang berkuasa. CodeIgniter ialah rangka kerja ringan yang lebih sesuai untuk projek kecil hingga sederhana, menekankan kelajuan dan kemudahan penggunaan. Untuk projek besar dengan keperluan yang kompleks dan bilangan pengguna yang ramai, kuasa dan kebolehskalaan Laravel adalah lebih sesuai. Untuk projek atau situasi mudah dengan sumber terhad, keupayaan pembangunan CodeIgniter yang ringan dan pantas adalah lebih ideal.

Laravel vs CodeIgniter: Rangka kerja manakah yang lebih baik untuk projek kecil? Laravel vs CodeIgniter: Rangka kerja manakah yang lebih baik untuk projek kecil? Jun 04, 2024 pm 05:29 PM

Untuk projek kecil, Laravel sesuai untuk projek yang lebih besar yang memerlukan fungsi dan keselamatan yang kukuh. CodeIgniter sesuai untuk projek yang sangat kecil yang memerlukan ringan dan mudah digunakan.

Manakah enjin templat yang lebih baik, Laravel atau CodeIgniter? Manakah enjin templat yang lebih baik, Laravel atau CodeIgniter? Jun 03, 2024 am 11:30 AM

Membandingkan enjin templat Laravel's Blade dan CodeIgniter's Twig, pilih berdasarkan keperluan projek dan keutamaan peribadi: Blade adalah berdasarkan sintaks MVC, yang menggalakkan organisasi kod dan warisan templat yang baik. Twig ialah perpustakaan pihak ketiga yang menyediakan sintaks fleksibel, penapis berkuasa, sokongan lanjutan dan kotak pasir keselamatan.

Laravel - Konsol Artisan Laravel - Konsol Artisan Aug 27, 2024 am 10:51 AM

Laravel - Artisan Console - Rangka kerja Laravel menyediakan tiga alat utama untuk interaksi melalui baris arahan iaitu: Artisan, Ticker dan REPL. Bab ini menerangkan tentang Artisan secara terperinci.

See all articles