PHPCarbon教程展示了如何使用Carbonpackage在PHP中处理日期和时间。我们使用nesbot/carbon
包。
$ php -v php -v PHP 8.1.2 (cli) (built: Aug 8 2022 07:28:23) (NTS) ...
我们使用PHP版本8.1.2。
PHP碳
Carbon是一个PHP日期时间库。它是PHPDateTime
类的扩展。
PHPCarbon设置
该软件包随composer一起安装。
$ composer req nesbot/carbon
我们安装nesbot/carbon
包。
今天的碳
以下示例显示如何获取今天的日期。
<?php require __DIR__ . '/vendor/autoload.php'; use Carbon\Carbon; $now = Carbon::now(); echo "$now\n"; $today = Carbon::today(); echo "$today\n";
Carbon::now
返回当前日期和时间,Carbon:today
返回当前日期。
$ php today.php 2022-07-13 15:53:45 2022-07-13 00:00:00
这是一个示例输出。
Carbon::yesterday
为昨天创建一个Carbon实例,为明天创建一个Carbon::tomorrow
实例。
<?php require __DIR__ . '/vendor/autoload.php'; use Carbon\Carbon; $yes = Carbon::yesterday(); echo "Yesterday: $yes\n"; $tom = Carbon::tomorrow(); echo "Tomorrow: $tom\n";
示例显示昨天和明天的日期。
$ yes_tom.php Yesterday: 2022-07-12 00:00:00 Tomorrow: 2022-07-14 00:00:00
碳创造
可以使用多种创建方法创建Carbon实例。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; $d1 = Carbon::create(2018, 8, 25, 22, 48, 00); echo $d1 . "\n"; $d2 = Carbon::create(2018, 8, 25, 22, 48, 00, 'Europe/Moscow'); echo $d2 . "\n"; $d3 = Carbon::createFromDate(2018, 8, 14, 'America/Chicago'); echo $d3 . "\n"; $d4 = Carbon::createFromTimestamp(1); echo $d4 . "\n";
该示例使用四种不同的方法创建Carbon实例。
$d1 = Carbon::create(2018, 8, 25, 22, 48, 00);
create
方法从日期和时间部分生成一个Carbon实例。
$d2 = Carbon::create(2018, 8, 25, 22, 48, 00, 'Europe/Moscow');
在第二个例子中,我们还提供了一个时区。
$d3 = Carbon::createFromDate(2018, 8, 14, 'America/Chicago');
使用createFromDate
,我们创建了一个包含日期部分的Carbon实例。
$d4 = Carbon::createFromTimestamp(1);
createFromTimestamp
从Unix时间创建一个Carbon实例。
$ php create.php 2018-08-25 22:48:00 2018-08-25 22:48:00 2018-08-14 03:33:16 1970-01-01 01:00:01
这是一个示例输出。
碳相对修饰符
Carbon实例可以从相关修饰符创建,例如下周五或1年前。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; echo new Carbon('tomorrow') . "\n"; echo new Carbon('yesterday') . "\n"; echo new Carbon('next wednesday') . "\n"; echo new Carbon('last friday') . "\n"; echo new Carbon('this saturday') . "\n"; echo new Carbon('1 year ago') . "\n";
该示例使用几个修饰符创建Carbon实例。
$ php relative_modifiers.php 2022-07-14 00:00:00 2022-07-12 00:00:00 2022-07-20 00:00:00 2022-07-08 00:00:00 2022-07-16 00:00:00 2021-07-13 15:55:09
这是一个示例输出。
下一个和上一个碳
next
和previous
方法给出给定星期几的下一个/上一个事件。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; $now = Carbon::now(); echo "$now\n"; $next_monday = $now->next(Carbon::MONDAY); echo "Next monday: $next_monday\n"; $prev_monday = $now->previous(Carbon::MONDAY); echo "Previous monday: $prev_monday\n";
该示例显示下一个和上一个星期一。
$ php next_previous.php 2022-07-13 15:55:51 Next monday: 2022-07-18 00:00:00 Previous monday: 2022-07-11 00:00:00
这是一个示例输出。
Carbon日期时间部分
Carbon日期时间由年、月、日或小时组成。
<?php require __DIR__ . '/vendor/autoload.php'; use Carbon\Carbon; $now = Carbon::now(); echo $now->year . "\n"; echo $now->month . "\n"; echo $now->day . "\n"; echo $now->hour . "\n"; echo $now->second . "\n"; echo $now->dayOfWeek . "\n"; echo $now->dayOfYear . "\n"; echo $now->weekOfMonth . "\n"; echo $now->daysInMonth . "\n";
该示例显示了Carbon日期时间实例的各个部分。
$ php parts.php 2022 7 13 15 17 3 194 2 31
这是一个示例输出。
CarbonFluentAPI
Carbon还提供方便、流畅的API来处理日期时间。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; $dt = Carbon::create(); $dt->year(2019)->month(5)->day(6)->hour(16)->minute(12)->second(53); echo $dt . "\n"; $dt2 = Carbon::create(); $dt2->setDate(2019, 5, 6)->setTime(16, 12, 53); echo $dt2 . "\n"; $dt3 = Carbon::create(); $dt3->setDate(2019, 5, 6)->setTime(16, 12, 53); echo $dt3 . "\n";
该示例使用流畅的API创建了三个Carbon实例。
$ php fluent_api.php 2019-05-06 16:12:53 2019-05-06 16:12:53 2019-05-06 16:12:53
这是输出。
复写法
碳修改方法修改实例。我们可以使用copy
方法来处理副本。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; echo "Tomorrow: " . Carbon::tomorrow() . "\n"; echo "*************************\n"; $dt = new Carbon('tomorrow'); echo $dt->subDay() . "\n"; echo $dt . "\n"; echo "*************************\n"; $dt2 = new Carbon('tomorrow'); echo $dt2->copy()->subDay() . "\n"; echo $dt2 . "\n";
该示例介绍了copy
方法。
$ php copy_method.php Tomorrow: 2022-07-14 00:00:00 ************************* 2022-07-13 00:00:00 2022-07-13 00:00:00 ************************* 2022-07-13 00:00:00 2022-07-14 00:00:00
在第二种情况下,原始实例是完整的。
碳加减法
Carbon提供了几种不同的方法来轻松地增加和减少时间。
<?php require __DIR__ . '/vendor/autoload.php'; use Carbon\Carbon; $now = Carbon::now(); echo "$now\n"; $d1 = $now->copy()->addDays(3); echo "$d1\n"; $d2 = $now->copy()->addHours(12); echo "$d2\n"; $d3 = $now->copy()->subDays(3); echo "$d3\n"; $d4 = $now->copy()->subHours(12); echo "$d4\n";
该示例介绍了addDays
、addHours
、subDays
和subHours
方法。
$ php add_sub.php 2022-07-13 15:57:59 2022-07-16 15:57:59 2022-07-14 03:57:59 2022-07-10 15:57:59 2022-07-13 03:57:59
这是一个示例输出。
下面的例子展示了其他的加法和减法。
<?php require __DIR__ . '/vendor/autoload.php'; use Carbon\Carbon; $now = Carbon::now(); $d1 = $now->copy()->addCenturies(2); echo $d1->toDateString() . "\n"; $d2 = $now->copy()->subCenturies(2); echo $d2->toDateString() . "\n"; $d3 = $now->copy()->addYears(2); echo $d3->toDateString() . "\n"; $d4 = $now->copy()->subYears(2); echo $d4->toDateString() . "\n"; $d5 = $now->copy()->addMonths(2); echo $d5->toDateString() . "\n"; $d6 = $now->copy()->subMonths(2); echo $d6->toDateString() . "\n";
我们显示addCenturies
、subCenturies
、addYears
、subYears
、addMonths
、和subMonths
。
$ php add_sub2.php 2222-07-13 1822-07-13 2024-07-13 2020-07-13 2022-09-13 2022-05-13
这是一个示例输出。
Carbon格式日期时间
Carbon提供了几种格式化日期时间的方法。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; $dt = Carbon::now(); echo $dt . "\n"; echo $dt->toDateTimeString(). "\n"; echo "******************************\n"; echo $dt->toDateString(). "\n"; echo $dt->toFormattedDateString(). "\n"; echo $dt->toTimeString(). "\n"; echo $dt->toDayDateTimeString(). "\n"; echo "******************************\n"; echo $dt->format('Y-m-d h:i:s A'). "\n";
该示例提供了基本的格式化方法。我们还可以使用format
生成自定义格式。
$ php formatting.php 2022-07-13 15:58:58 2022-07-13 15:58:58 ****************************** 2022-07-13 Jul 13, 2022 15:58:58 Wed, Jul 13, 2022 3:58 PM ****************************** 2022-07-13 03:58:58 PM
这是一个示例输出。
以下示例显示了其他常见的Carbon日期时间格式化方法。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; $dt = Carbon::createFromFormat('Y-m-d H:i:s.u', '2019-05-06 16:45:00.613484'); echo $dt->toAtomString() . "\n"; echo $dt->toCookieString() . "\n"; echo $dt->toIso8601String() . "\n"; echo $dt->toIso8601ZuluString() . "\n"; echo $dt->toRfc822String() . "\n"; echo $dt->toRfc850String() . "\n"; echo $dt->toRfc1036String() . "\n"; echo $dt->toRfc1123String() . "\n"; echo $dt->toRfc3339String() . "\n"; echo $dt->toRfc7231String() . "\n"; echo $dt->toRssString() . "\n"; echo $dt->toW3cString() . "\n";
该示例介绍了其他十二种方法。
$ php common_formats.php 2019-05-06T16:45:00+02:00 Monday, 06-May-2019 16:45:00 CEST 2019-05-06T16:45:00+02:00 2019-05-06T14:45:00Z Mon, 06 May 19 16:45:00 +0200 Monday, 06-May-19 16:45:00 CEST Mon, 06 May 19 16:45:00 +0200 Mon, 06 May 2019 16:45:00 +0200 2019-05-06T16:45:00+02:00 Mon, 06 May 2019 14:45:00 GMT Mon, 06 May 2019 16:45:00 +0200 2019-05-06T16:45:00+02:00
这是输出。
碳比较日期时间
Carbon有eq
和gt
等方法来比较日期时间。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; $first = Carbon::create(2019, 5, 5, 22, 20, 1); $second = Carbon::create(2019, 5, 5, 20, 20, 1); echo $first . "\n"; echo $second . "\n"; 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));
该示例比较两个日期时间值。
$ php comparison.php 2019-05-05 22:20:01 2019-05-05 20:20:01 bool(false) bool(true) bool(true) bool(true) bool(false) bool(false)
这是输出。
碳UTC
协调世界时(UTC)是世界调整时钟和时间的主要时间标准。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; $now = Carbon::now(); echo "$now\n"; isUtc($now); echo "Offset hours: {$now->offsetHours}\n"; echo "******************************\n"; $now->tz('UTC'); echo "$now\n"; isUtc($now); function isUtc($now): void { if ($now->utc) { echo "Datetime is in UTC\n"; } else { echo "Datetime is not in UTC\n"; } }
该示例计算UTC时间、以小时为单位的偏移量并确定日期时间是否为UTC时间。
$ php utc.php 2022-07-13 15:59:49 Datetime is not in UTC Offset hours: 2 ****************************** 2022-07-13 13:59:49 Datetime is in UTC
这是一个示例输出。
Carbon人性化日期时差
应用程序通常以所谓的人性化格式显示日期时间差异;例如一年或3分钟前。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; echo Carbon::now()->addYear()->diffForHumans() . "\n"; Carbon::setLocale('de'); echo Carbon::now()->addYear()->diffForHumans() . "\n"; Carbon::setLocale('sk'); echo Carbon::now()->addYear()->diffForHumans() . "\n";
该示例显示了三种语言环境中的日期时间差异。
$ php humanize.php 11 months from now in 11 Monaten o 11 mesiacov
这是输出。
碳改性剂
修饰符方法对当前实例执行有用的修改。它们可以检索周、月或年的开始/结束。
<?php require __DIR__ . "/vendor/autoload.php"; use Carbon\Carbon; echo "Start/End of day\n"; $dt = Carbon::now(); echo $dt->copy()->startOfDay() . "\n"; echo $dt->copy()->endOfDay() . "\n"; echo "\nStart/End of month\n"; echo $dt->copy()->startOfMonth() . "\n"; echo $dt->copy()->endOfMonth() . "\n"; echo "\nStart/End of year\n"; echo $dt->copy()->startOfYear() . "\n"; echo $dt->copy()->endOfYear() . "\n"; echo "\nStart/End of decade\n"; echo $dt->copy()->startOfDecade() . "\n"; echo $dt->copy()->endOfDecade() . "\n"; echo "\nStart/End of century\n"; echo $dt->copy()->startOfCentury() . "\n"; echo $dt->copy()->endOfCentury() . "\n";
该示例提供了几个修饰符。
$ php modifiers.php Start/End of day 2022-07-13 00:00:00 2022-07-13 23:59:59 Start/End of month 2022-07-01 00:00:00 2022-07-31 23:59:59 Start/End of year 2022-01-01 00:00:00 2022-12-31 23:59:59 Start/End of decade 2020-01-01 00:00:00 2029-12-31 23:59:59 Start/End of century 2001-01-01 00:00:00 2100-12-31 23:59:59
这是一个示例输出。
在本教程中,我们使用PHPCarbon来处理日期和时间。
列出所有PHP教程。