PHP Carbon 教程展示了如何在带有 Carbon 包的 PHP 中使用日期和时间。 我们使用nesbot/carbon包。
PHP Carbon
Carbon 是一个 PHP 日期时间库。 它是 PHP DateTime类的扩展。
PHP Carbon 设置
该包随 composer 一起安装。
$ composer req nesbot/carbon
我们安装nesbot/carbon包。
今天的日期
以下示例显示如何获取今天的日期。
today.php
<?phprequire __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.php2019-05-07 10:20:542019-05-07 00:00:00
这是一个示例输出。
Carbon::yesterday()为昨天创建一个 Carbon 实例,为明天创建Carbon::tomorrow()。
yes_tom.php
<?phprequire __DIR__ . '/vendor/autoload.php';use Carbon\Carbon;$yes = Carbon::yesterday();echo "Yesterday: $yes\n";$tom = Carbon::tomorrow();echo "Tomorrow: $tom\n";
该示例显示了昨天和明天的日期。
Carbon 来创建
Carbon 实例可以使用几种创建方法来创建。
create.php
<?phprequire __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.php2018-08-25 22:48:002018-08-25 22:48:002018-08-14 03:33:161970-01-01 01:00:01
This is a sample output.
Carbon 相对修饰符
碳实例可以通过相对修饰符来创建,例如下一个星期五或一年之前。
relative_modifiers.php
<?phprequire __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.php2019-05-08 00:00:002019-05-06 00:00:002019-05-08 00:00:002019-05-03 00:00:002019-05-11 00:00:002018-05-07 11:53:03
This is a sample output.
Carbon next()和previous()
next()和previous()方法给出一周中给定日期的下一个/上一个出现。
next_previous.php
<?phprequire __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.php2019-05-07 11:34:32Next monday: 2019-05-13 00:00:00Previous monday: 2019-05-06 00:00:00
This is a sample output.
Carbon 日期时间
Carbon 日期时间包括年,月,日或小时。
parts.php
<?phprequire __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.php20195710312126131
This is a sample output.
Carbon 流式 API
Carbon 还提供了方便的流式 API 来处理日期时间。
fluent_api.php
<?phprequire __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.php2019-05-06 16:12:532019-05-06 16:12:532019-05-06 16:12:53
这是输出。
Carbon 修改方法
Carbon 修改方法修改实例。 我们可以使用copy()方法来处理副本。
copy_method.php
<?phprequire __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.phpTomorrow: 2019-05-08 00:00:00*************************2019-05-07 00:00:002019-05-07 00:00:00*************************2019-05-07 00:00:002019-05-08 00:00:00
在第二种情况下,原始实例是完整的。
碳加减法
碳提供了两种不同的方法来轻松增加和减少时间。
add_sub.php
<?phprequire __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.php2019-05-07 12:27:222019-05-10 12:27:222019-05-08 00:27:222019-05-04 12:27:222019-05-07 00:27:22
This is a sample output.
下面的示例显示其他加法和减法。
add_sub.php
<?phprequire __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.php2219-05-071819-05-072021-05-072017-05-072019-07-072019-03-07
This is a sample output.
Carbon 格式化日期时间
Carbon 提供了几种格式化日期时间的方法。
formatting.php
<?phprequire __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.php2019-05-07 10:36:092019-05-07 10:36:09******************************2019-05-07May 7, 201910:36:09Tue, May 7, 2019 10:36 AM******************************2019-05-07 10:36:09 AM
This is a sample output.
下面的示例显示其他常见的 Carbon 日期时间格式化方法。
common_formats.php
<?phprequire __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.php2019-05-06T16:45:00+02:00Monday, 06-May-2019 16:45:00 CEST2019-05-06T16:45:00+02:002019-05-06T14:45:00ZMon, 06 May 19 16:45:00 +0200Monday, 06-May-19 16:45:00 CESTMon, 06 May 19 16:45:00 +0200Mon, 06 May 2019 16:45:00 +02002019-05-06T16:45:00+02:00Mon, 06 May 2019 14:45:00 GMTMon, 06 May 2019 16:45:00 +02002019-05-06T16:45:00+02:00
This is the output.
Carbon 比较日期时间
Carbon 具有比较日期时间的方法,例如eq()和gt()。
comparing.php
<?phprequire __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.php2019-05-05 22:20:012019-05-05 20:20:01bool(false)bool(true)bool(true)bool(true)bool(false)bool(false)
This is the output.
Carbon UTC
协调世界时(UTC)是世界各地用来调节时钟和时间的主要时间标准。
utc.php
<?phprequire __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.php2019-05-07 11:14:18Datetime is not in UTCOffset hours: 2******************************2019-05-07 09:14:18Datetime is in UTC
This is a sample output.
Carbon 人性化日期时间差异
应用通常以所谓的人性化格式显示日期时间差异。 例如在一年或三分钟前。
humanized.php
<?phprequire __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.php1 year from nowin 1 Jahrza rok
This is the output.
Carbon 修饰符
修饰符方法对当前实例执行有用的修改。 他们可以检索周,月或年的开始/结束。
modifiers.php
<?phprequire __DIR__ . "/vendor/autoload.php";use Carbon\Carbon;echo "Start/End of day\n";$dt = Carbon::create(2019, 5, 6, 12, 0, 0);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.phpStart/End of day2019-05-06 00:00:002019-05-06 23:59:59Start/End of month2019-05-01 00:00:002019-05-31 23:59:59Start/End of year2019-01-01 00:00:002019-12-31 23:59:59Start/End of decade2010-01-01 00:00:002019-12-31 23:59:59Start/End of century2001-01-01 00:00:002100-12-31 23:59:59
This is a sample output.
在本教程中,我们使用 PHP Carbon 来处理日期和时间。
您可能也对以下相关教程感兴趣: PHP PDO 教程, Twig 教程和 PHP 教程,或列出所有 PHP 教程 ]。
