原文: https://zetcode.com/php/carbon/

PHP Carbon 教程展示了如何在带有 Carbon 包的 PHP 中使用日期和时间。 我们使用nesbot/carbon包。

PHP Carbon

Carbon 是一个 PHP 日期时间库。 它是 PHP DateTime类的扩展。

PHP Carbon 设置

该包随 composer 一起安装。

  1. $ composer req nesbot/carbon

我们安装nesbot/carbon包。

今天的日期

以下示例显示如何获取今天的日期。

today.php

  1. <?php
  2. require __DIR__ . '/vendor/autoload.php';
  3. use Carbon\Carbon;
  4. $now = Carbon::now();
  5. echo "$now\n";
  6. $today = Carbon::today();
  7. echo "$today\n";

Carbon::now()返回当前日期和时间,Carbon:today()返回当前日期。

  1. $ php today.php
  2. 2019-05-07 10:20:54
  3. 2019-05-07 00:00:00

这是一个示例输出。

Carbon::yesterday()为昨天创建一个 Carbon 实例,为明天创建Carbon::tomorrow()

yes_tom.php

  1. <?php
  2. require __DIR__ . '/vendor/autoload.php';
  3. use Carbon\Carbon;
  4. $yes = Carbon::yesterday();
  5. echo "Yesterday: $yes\n";
  6. $tom = Carbon::tomorrow();
  7. echo "Tomorrow: $tom\n";

该示例显示了昨天和明天的日期。

Carbon 来创建

Carbon 实例可以使用几种创建方法来创建。

create.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. $d1 = Carbon::create(2018, 8, 25, 22, 48, 00);
  5. echo $d1 . "\n";
  6. $d2 = Carbon::create(2018, 8, 25, 22, 48, 00, 'Europe/Moscow');
  7. echo $d2 . "\n";
  8. $d3 = Carbon::createFromDate(2018, 8, 14, 'America/Chicago');
  9. echo $d3 . "\n";
  10. $d4 = Carbon::createFromTimestamp(1);
  11. echo $d4 . "\n";

该示例使用四种不同的方法创建 Carbon 实例。

  1. $d1 = Carbon::create(2018, 8, 25, 22, 48, 00);

create()方法根据日期和时间部分生成一个 Carbon 实例。

  1. $d2 = Carbon::create(2018, 8, 25, 22, 48, 00, 'Europe/Moscow');

在第二个示例中,我们还提供了一个时区。

  1. $d3 = Carbon::createFromDate(2018, 8, 14, 'America/Chicago');

使用createFromDate(),我们创建一个带有日期部分的 Carbon 实例。

  1. $d4 = Carbon::createFromTimestamp(1);

createFromTimestamp()从 Unix 时间创建一个 Carbon 实例。

  1. $ php create.php
  2. 2018-08-25 22:48:00
  3. 2018-08-25 22:48:00
  4. 2018-08-14 03:33:16
  5. 1970-01-01 01:00:01

This is a sample output.

Carbon 相对修饰符

碳实例可以通过相对修饰符来创建,例如下一个星期五或一年之前。

relative_modifiers.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. echo new Carbon('tomorrow') . "\n";
  5. echo new Carbon('yesterday') . "\n";
  6. echo new Carbon('next wednesday') . "\n";
  7. echo new Carbon('last friday') . "\n";
  8. echo new Carbon('this saturday') . "\n";
  9. echo new Carbon('1 year ago') . "\n";

该示例使用几个修饰符创建 Carbon 实例。

  1. $ php relative_modifiers.php
  2. 2019-05-08 00:00:00
  3. 2019-05-06 00:00:00
  4. 2019-05-08 00:00:00
  5. 2019-05-03 00:00:00
  6. 2019-05-11 00:00:00
  7. 2018-05-07 11:53:03

This is a sample output.

Carbon next()previous()

next()previous()方法给出一周中给定日期的下一个/上一个出现。

next_previous.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. $now = Carbon::now();
  5. echo "$now\n";
  6. $next_monday = $now->next(Carbon::MONDAY);
  7. echo "Next monday: $next_monday\n";
  8. $prev_monday = $now->previous(Carbon::MONDAY);
  9. echo "Previous monday: $prev_monday\n";

该示例显示了下一个和上一个星期一。

  1. $ php next_previous.php
  2. 2019-05-07 11:34:32
  3. Next monday: 2019-05-13 00:00:00
  4. Previous monday: 2019-05-06 00:00:00

This is a sample output.

Carbon 日期时间

Carbon 日期时间包括年,月,日或小时。

parts.php

  1. <?php
  2. require __DIR__ . '/vendor/autoload.php';
  3. use Carbon\Carbon;
  4. $now = Carbon::now();
  5. echo $now->year . "\n";
  6. echo $now->month . "\n";
  7. echo $now->day . "\n";
  8. echo $now->hour . "\n";
  9. echo $now->second . "\n";
  10. echo $now->dayOfWeek . "\n";
  11. echo $now->dayOfYear . "\n";
  12. echo $now->weekOfMonth . "\n";
  13. echo $now->daysInMonth . "\n";

该示例显示 Carbon 日期时间实例的各个部分。

  1. $ php parts.php
  2. 2019
  3. 5
  4. 7
  5. 10
  6. 31
  7. 2
  8. 126
  9. 1
  10. 31

This is a sample output.

Carbon 流式 API

Carbon 还提供了方便的流式 API 来处理日期时间。

fluent_api.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. $dt = Carbon::create();
  5. $dt->year(2019)->month(5)->day(6)->hour(16)->minute(12)->second(53);
  6. echo $dt . "\n";
  7. $dt2 = Carbon::create();
  8. $dt2->setDate(2019, 5, 6)->setTime(16, 12, 53);
  9. echo $dt2 . "\n";
  10. $dt3 = Carbon::create();
  11. $dt3->setDate(2019, 5, 6)->setTime(16, 12, 53);
  12. echo $dt3 . "\n";

该示例使用流畅的 API 创建了三个 Carbon 实例。

  1. $ php fluent_api.php
  2. 2019-05-06 16:12:53
  3. 2019-05-06 16:12:53
  4. 2019-05-06 16:12:53

这是输出。

Carbon 修改方法

Carbon 修改方法修改实例。 我们可以使用copy()方法来处理副本。

copy_method.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. echo "Tomorrow: " . Carbon::tomorrow() . "\n";
  5. echo "*************************\n";
  6. $dt = new Carbon('tomorrow');
  7. echo $dt->subDay() . "\n";
  8. echo $dt . "\n";
  9. echo "*************************\n";
  10. $dt2 = new Carbon('tomorrow');
  11. echo $dt2->copy()->subDay() . "\n";
  12. echo $dt2 . "\n";

该示例介绍了copy()方法。

  1. $ php copy_method.php
  2. Tomorrow: 2019-05-08 00:00:00
  3. *************************
  4. 2019-05-07 00:00:00
  5. 2019-05-07 00:00:00
  6. *************************
  7. 2019-05-07 00:00:00
  8. 2019-05-08 00:00:00

在第二种情况下,原始实例是完整的。

碳加减法

碳提供了两种不同的方法来轻松增加和减少时间。

add_sub.php

  1. <?php
  2. require __DIR__ . '/vendor/autoload.php';
  3. use Carbon\Carbon;
  4. $now = Carbon::now();
  5. echo "$now\n";
  6. $d1 = $now->copy()->addDays(3);
  7. echo "$d1\n";
  8. $d2 = $now->copy()->addHours(12);
  9. echo "$d2\n";
  10. $d3 = $now->copy()->subDays(3);
  11. echo "$d3\n";
  12. $d4 = $now->copy()->subHours(12);
  13. echo "$d4\n";

该示例介绍了addDays()addHours()subDays()subHours()方法。

  1. $ php add_sub.php
  2. 2019-05-07 12:27:22
  3. 2019-05-10 12:27:22
  4. 2019-05-08 00:27:22
  5. 2019-05-04 12:27:22
  6. 2019-05-07 00:27:22

This is a sample output.

下面的示例显示其他加法和减法。

add_sub.php

  1. <?php
  2. require __DIR__ . '/vendor/autoload.php';
  3. use Carbon\Carbon;
  4. $now = Carbon::now();
  5. $d1 = $now->copy()->addCenturies(2);
  6. echo $d1->toDateString() . "\n";
  7. $d2 = $now->copy()->subCenturies(2);
  8. echo $d2->toDateString() . "\n";
  9. $d3 = $now->copy()->addYears(2);
  10. echo $d3->toDateString() . "\n";
  11. $d4 = $now->copy()->subYears(2);
  12. echo $d4->toDateString() . "\n";
  13. $d5 = $now->copy()->addMonths(2);
  14. echo $d5->toDateString() . "\n";
  15. $d6 = $now->copy()->subMonths(2);
  16. echo $d6->toDateString() . "\n";

我们显示addCenturies()subCenturies()addYears()subYears()addMonths()subMonths()

  1. $ php add_sub2.php
  2. 2219-05-07
  3. 1819-05-07
  4. 2021-05-07
  5. 2017-05-07
  6. 2019-07-07
  7. 2019-03-07

This is a sample output.

Carbon 格式化日期时间

Carbon 提供了几种格式化日期时间的方法。

formatting.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. $dt = Carbon::now();
  5. echo $dt . "\n";
  6. echo $dt->toDateTimeString(). "\n";
  7. echo "******************************\n";
  8. echo $dt->toDateString(). "\n";
  9. echo $dt->toFormattedDateString(). "\n";
  10. echo $dt->toTimeString(). "\n";
  11. echo $dt->toDayDateTimeString(). "\n";
  12. echo "******************************\n";
  13. echo $dt->format('Y-m-d h:i:s A'). "\n";

该示例提供了基本的格式化方法。 我们还可以使用format()生成自定义格式。

  1. $ php formatting.php
  2. 2019-05-07 10:36:09
  3. 2019-05-07 10:36:09
  4. ******************************
  5. 2019-05-07
  6. May 7, 2019
  7. 10:36:09
  8. Tue, May 7, 2019 10:36 AM
  9. ******************************
  10. 2019-05-07 10:36:09 AM

This is a sample output.

下面的示例显示其他常见的 Carbon 日期时间格式化方法。

common_formats.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. $dt = Carbon::createFromFormat('Y-m-d H:i:s.u', '2019-05-06 16:45:00.613484');
  5. echo $dt->toAtomString() . "\n";
  6. echo $dt->toCookieString() . "\n";
  7. echo $dt->toIso8601String() . "\n";
  8. echo $dt->toIso8601ZuluString() . "\n";
  9. echo $dt->toRfc822String() . "\n";
  10. echo $dt->toRfc850String() . "\n";
  11. echo $dt->toRfc1036String() . "\n";
  12. echo $dt->toRfc1123String() . "\n";
  13. echo $dt->toRfc3339String() . "\n";
  14. echo $dt->toRfc7231String() . "\n";
  15. echo $dt->toRssString() . "\n";
  16. echo $dt->toW3cString() . "\n";

该示例介绍了其他十二种方法。

  1. $ php common_formats.php
  2. 2019-05-06T16:45:00+02:00
  3. Monday, 06-May-2019 16:45:00 CEST
  4. 2019-05-06T16:45:00+02:00
  5. 2019-05-06T14:45:00Z
  6. Mon, 06 May 19 16:45:00 +0200
  7. Monday, 06-May-19 16:45:00 CEST
  8. Mon, 06 May 19 16:45:00 +0200
  9. Mon, 06 May 2019 16:45:00 +0200
  10. 2019-05-06T16:45:00+02:00
  11. Mon, 06 May 2019 14:45:00 GMT
  12. Mon, 06 May 2019 16:45:00 +0200
  13. 2019-05-06T16:45:00+02:00

This is the output.

Carbon 比较日期时间

Carbon 具有比较日期时间的方法,例如eq()gt()

comparing.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. $first = Carbon::create(2019, 5, 5, 22, 20, 1);
  5. $second = Carbon::create(2019, 5, 5, 20, 20, 1);
  6. echo $first . "\n";
  7. echo $second . "\n";
  8. var_dump($first->eq($second));
  9. var_dump($first->ne($second));
  10. var_dump($first->gt($second));
  11. var_dump($first->gte($second));
  12. var_dump($first->lt($second));
  13. var_dump($first->lte($second));

该示例比较两个日期时间值。

  1. $ php comparison.php
  2. 2019-05-05 22:20:01
  3. 2019-05-05 20:20:01
  4. bool(false)
  5. bool(true)
  6. bool(true)
  7. bool(true)
  8. bool(false)
  9. bool(false)

This is the output.

Carbon UTC

协调世界时(UTC)是世界各地用来调节时钟和时间的主要时间标准。

utc.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. $now = Carbon::now();
  5. echo "$now\n";
  6. isUtc($now);
  7. echo "Offset hours: {$now->offsetHours}\n";
  8. echo "******************************\n";
  9. $now->tz('UTC');
  10. echo "$now\n";
  11. isUtc($now);
  12. function isUtc($now): void
  13. {
  14. if ($now->utc)
  15. {
  16. echo "Datetime is in UTC\n";
  17. } else {
  18. echo "Datetime is not in UTC\n";
  19. }
  20. }

该示例计算 UTC 时间(以小时为单位的偏移量),并确定日期时间是否为 UTC 时间。

  1. $ php utc.php
  2. 2019-05-07 11:14:18
  3. Datetime is not in UTC
  4. Offset hours: 2
  5. ******************************
  6. 2019-05-07 09:14:18
  7. Datetime is in UTC

This is a sample output.

Carbon 人性化日期时间差异

应用通常以所谓的人性化格式显示日期时间差异。 例如在一年或三分钟前。

humanized.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. echo Carbon::now()->addYear()->diffForHumans() . "\n";
  5. Carbon::setLocale('de');
  6. echo Carbon::now()->addYear()->diffForHumans() . "\n";
  7. Carbon::setLocale('sk');
  8. echo Carbon::now()->addYear()->diffForHumans() . "\n";

该示例显示了三种语言环境中的日期时间差异。

  1. $ php humanize.php
  2. 1 year from now
  3. in 1 Jahr
  4. za rok

This is the output.

Carbon 修饰符

修饰符方法对当前实例执行有用的修改。 他们可以检索周,月或年的开始/结束。

modifiers.php

  1. <?php
  2. require __DIR__ . "/vendor/autoload.php";
  3. use Carbon\Carbon;
  4. echo "Start/End of day\n";
  5. $dt = Carbon::create(2019, 5, 6, 12, 0, 0);
  6. echo $dt->copy()->startOfDay() . "\n";
  7. echo $dt->copy()->endOfDay() . "\n";
  8. echo "\nStart/End of month\n";
  9. echo $dt->copy()->startOfMonth() . "\n";
  10. echo $dt->copy()->endOfMonth() . "\n";
  11. echo "\nStart/End of year\n";
  12. echo $dt->copy()->startOfYear() . "\n";
  13. echo $dt->copy()->endOfYear() . "\n";
  14. echo "\nStart/End of decade\n";
  15. echo $dt->copy()->startOfDecade() . "\n";
  16. echo $dt->copy()->endOfDecade() . "\n";
  17. echo "\nStart/End of century\n";
  18. echo $dt->copy()->startOfCentury() . "\n";
  19. echo $dt->copy()->endOfCentury() . "\n";

该示例提出了几个修饰符。

  1. $ php modifiers.php
  2. Start/End of day
  3. 2019-05-06 00:00:00
  4. 2019-05-06 23:59:59
  5. Start/End of month
  6. 2019-05-01 00:00:00
  7. 2019-05-31 23:59:59
  8. Start/End of year
  9. 2019-01-01 00:00:00
  10. 2019-12-31 23:59:59
  11. Start/End of decade
  12. 2010-01-01 00:00:00
  13. 2019-12-31 23:59:59
  14. Start/End of century
  15. 2001-01-01 00:00:00
  16. 2100-12-31 23:59:59

This is a sample output.

在本教程中,我们使用 PHP Carbon 来处理日期和时间。

您可能也对以下相关教程感兴趣: PHP PDO 教程Twig 教程PHP 教程,或列出所有 PHP 教程 ]。