날짜 형식, 시간대, 윤년, 날짜가 다른 월 등 날짜와 시간을 처리할 때 고려해야 할 사항이 많습니다. Laravel의 시간 처리 패키지 Carbon은 사용이 간편하며 도움이 필요한 친구들이 참조할 수 있습니다.
머리말
우리 모두는 PHP 애플리케이션을 작성할 때 날짜와 시간을 처리해야 하는 경우가 많습니다. 이 기사에서는 처리를 더 쉽게 해주는 PHP DateTime 클래스에서 상속된 API 확장인 Carbon에 대해 설명합니다. 날짜와 시간으로.
Laravel에서 사용되는 기본 시간 처리 클래스는 Carbon입니다.
1 2 3 4 5 6 7 | <?php
namespace Carbon;
class Carbon extends \DateTime
{
}
|
로그인 후 복사
Carbon 네임스페이스의 Carbon 클래스에서 위에서 선언한 코드 조각을 볼 수 있습니다.
Installation
Carbon은 Composer를 통해 설치할 수 있습니다:
1 | composer require nesbot/carbon
|
로그인 후 복사
PS: Laravel 프로젝트에서는 기본적으로 이 패키지를 설치하므로 위 명령을 다시 실행할 필요가 없습니다.
을 사용하려면 매번 완전한 이름을 제공하지 않고 사용할 수 있도록 네임스페이스를 통해 Carbon을 가져와야 합니다.
현재 시간 가져오기
now() 메서드를 사용하면 현재 날짜와 시간을 가져올 수 있습니다. 매개변수를 지정하지 않으면 PHP 구성의 시간대가 사용됩니다.
1 2 3 | <?php
echo Carbon::now();
?>
|
로그인 후 복사
다른 시간대를 사용하려면 유효한 시간대를 매개변수로 전달해야 합니다.
1 2 3 4 | echo Carbon::now('Europe/London');
echo Carbon::now( new DateTimeZone('Europe/London'));
|
로그인 후 복사
제외 < code>now() 또한 today()
, tomorrow()
및 yesterday()
와 같은 정적 함수는 그러나 시간은 모두 00:00:00입니다. now()
外,还提供了 today()
、tomorrow()
、yesterday()
等静态函数,不过,它们的时间都是 00:00:00 :
1 2 3 4 | echo Carbon::now();
echo Carbon::today();
echo Carbon::tomorrow('Europe/London');
echo Carbon::yesterday();
|
로그인 후 복사
以上输出结果其实是一个 Carbon 类型的日期时间对象:
1 2 3 4 5 | Carbon {#179 ▼
+ "date" : "2016-06-14 00:00:00.000000"
+ "timezone_type" : 3
+ "timezone" : "UTC"
}
|
로그인 후 복사
要想获取字符串类型的日期,可以使用下面的代码:
1 2 3 | echo Carbon::today()->toDateTimeString();
echo Carbon::yesterday()->toDateTimeString();
echo Carbon::tomorrow()->toDateTimeString();
|
로그인 후 복사
日期类型转为字符串
如上所述,默认情况下,Carbon 的方法返回的为一个日期时间对象。虽然它是一个对象,但是你却可以直接使用 echo 输出结果,因为有 __toString 魔术方法。但是如果你想把它转为字符串,可以使用 toDateString 或 toDateTimeString 方法:
1 2 | echo Carbon::now()->toDateString();
echo Carbon::now()->toDateTimeString();
|
로그인 후 복사
日期解析
你还可以使用 parse 方法解析任何顺序和类型的日期(结果为 Carbon 类型的日期时间对象):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | echo Carbon::parse('2016-10-15')->toDateTimeString();
echo Carbon::parse('2016-10-15')->toDateTimeString();
echo Carbon::parse('2016-10-15 00:10:25')->toDateTimeString();
echo Carbon::parse('today')->toDateTimeString();
echo Carbon::parse('yesterday')->toDateTimeString();
echo Carbon::parse('tomorrow')->toDateTimeString();
echo Carbon::parse('2 days ago')->toDateTimeString();
echo Carbon::parse('+3 days')->toDateTimeString();
echo Carbon::parse('+2 weeks')->toDateTimeString();
echo Carbon::parse('+4 months')->toDateTimeString();
echo Carbon::parse('-1 year')->toDateTimeString();
echo Carbon::parse('next wednesday')->toDateTimeString();
echo Carbon::parse('last friday')->toDateTimeString();
|
로그인 후 복사
构造日期
你还可以使用单独的年月日来构造日期:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $year = '2015';
$month = '04';
$day = '12';
echo Carbon::createFromDate( $year , $month , $day );
$hour = '02';
$minute = '15':
$second = '30';
echo Carbon::create( $year , $month , $day , $hour , $minute , $second );
echo Carbon::createFromDate(null, 12, 25);
|
로그인 후 복사
此外,还可以传递一个有效的时区作为最后一个参数。
日期操作
日期操作可以通过 add (增加)或 sub (减去)跟上要增加或减去的单位来完成。例如,你想给一个日期增加指定的天数,你可以使用 addDays 方法。此外还提供了一个 modify 方法,参数格式为 + 或 - 跟上值及单位。所以,如果你想给当前日期增加一年,你可以传递 +1 year:
1 2 3 4 5 6 7 | echo Carbon::now()->addDays(25);
echo Carbon::now()->addWeeks(3);
echo Carbon::now()->addHours(25);
echo Carbon::now()->subHours(2);
echo Carbon::now()->addHours(2)->addMinutes(12);
echo Carbon::now()->modify('+15 days');
echo Carbon::now()->modify('-2 days');
|
로그인 후 복사
日期比较
在 Carbon 中你可以使用下面的方法来比较日期:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | echo Carbon::now()->tzName;
$first = Carbon::create(2012, 9, 5, 23, 26, 11);
$second = Carbon::create(2012, 9, 5, 20, 26, 11, 'America/Vancouver');
echo $first ->toDateTimeString();
echo $first ->tzName;
echo $second ->toDateTimeString();
echo $second ->tzName;
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 ));
$first ->setDateTime(2012, 1, 1, 0, 0, 0);
$second ->setDateTime(2012, 1, 1, 0, 0, 0);
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 ));
|
로그인 후 복사
要判断一个日期是否介于两个日期之间,可以使用 between() 方法,第三个可选参数指定比较是否可以相等,默认为 true:
1 2 3 4 5 | $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 ));
var_dump(Carbon::create(2012, 9, 5, 5)->between( $first , $second ));
var_dump(Carbon::create(2012, 9, 5, 5)->between( $first , $second , false));
|
로그인 후 복사
此外还提供了一些辅助方法,你可以从它们的名字中明白其含义:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $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 ));
var_dump( $born ->isBirthday( $yesCake ));
var_dump( $overTheHill ->isBirthday());
|
로그인 후 복사
diffForHumans
“一个月前”比“30 天前”更便于阅读,很多日期库都提供了这个常见的功能,日期被解析后,有下面四种可能性:
1、当比较的时间超过当前默认时间
2、当用将来的时间与当前默认时间比较
3、当比较的值超过另一个值
4、当比较的值在另一个值之后
你可以把第二个参数设置为 true 来删除“前”、“距现在”等修饰语:diffForHumans(Carbon $other, true)
1 2 3 4 5 6 7 8 9 10 11 12 13 | echo Carbon::now()->subDays(5)->diffForHumans();
echo Carbon::now()->diffForHumans(Carbon::now()->subYear());
$dt = Carbon::createFromDate(2011, 8, 1);
echo $dt ->diffForHumans( $dt -> copy ()->addMonth());
echo $dt ->diffForHumans( $dt -> copy ()->subMonth());
echo Carbon::now()->addSeconds(5)->diffForHumans();
echo Carbon::now()->subDays(24)->diffForHumans();
echo Carbon::now()->subDays(24)->diffForHumans(null, true);
|
로그인 후 복사
위 출력 결과는 실제로 Carbon 유형의 날짜 및 시간 객체입니다.
1 2 3 4 | public function boot()
{
\Carbon\Carbon::setLocale('zh');
}
|
로그인 후 복사
로그인 후 복사
문자열 유형의 날짜를 얻으려면 다음 코드를 사용할 수 있습니다. 1 | $article ->created_at->diffForHumans();
|
로그인 후 복사
로그인 후 복사
날짜 유형을 문자열로 변환 🎜🎜🎜🎜🎜위에서 언급했듯이 기본적으로 Carbon의 메서드는 날짜 및 시간 개체를 반환합니다. 객체이지만 __toString 매직 메소드 덕분에 echo를 사용하여 직접 결과를 출력할 수 있습니다. 하지만 문자열로 변환하려면 toDateString 또는 toDateTimeString 메서드를 사용할 수 있습니다. 🎜rrreee🎜🎜Date parsing🎜🎜🎜🎜 또한 구문 분석 메서드를 사용하여 날짜의 순서와 유형을 구문 분석할 수도 있습니다(결과는 Carbon 유형 datetime 객체 ): 🎜rrreee🎜🎜 날짜 구성 🎜🎜🎜🎜 별도의 연, 월, 일을 사용하여 날짜를 구성할 수도 있습니다. 🎜rrreee🎜 또한 유효한 시간대를 마지막 인수로 전달할 수 있습니다. 🎜🎜🎜날짜 연산🎜🎜🎜🎜날짜 연산은 더하거나 뺄 단위를 따라가기 위해 더하기(증가) 또는 빼기(빼기)를 통해 수행할 수 있습니다. 예를 들어, 날짜에 지정된 일수를 추가하려면 addDays 메소드를 사용할 수 있습니다. 또한 수정 방법이 제공됩니다. 매개변수 형식은 + 또는 - 뒤에 값과 단위가 옵니다. 따라서 현재 날짜에 1년을 추가하려면 +1년을 넘길 수 있습니다. 🎜rrreee🎜🎜날짜 비교🎜🎜🎜🎜Carbon에서는 다음 방법을 사용하여 날짜를 비교할 수 있습니다. 🎜
- 🎜min – 최소 날짜를 반환합니다. 🎜
- 🎜max – 최대 날짜를 반환합니다. 🎜
- 🎜eq – 두 날짜가 같은지 확인합니다. 🎜
- 🎜gt – 첫 번째 날짜가 두 번째 날짜보다 큰지 여부를 결정합니다. 🎜
- 🎜lt – 첫 번째 날짜가 두 번째 날짜보다 작은지 여부를 결정합니다. 🎜
- 🎜gte – 첫 번째 날짜가 두 번째 날짜보다 크거나 같은지 확인합니다. 🎜
- 🎜lte – 첫 번째 날짜가 두 번째 날짜보다 작거나 같은지 확인합니다. 🎜
rrreee🎜 날짜가 두 날짜 사이에 있는지 확인하려면 between() 메서드를 사용할 수 있습니다. 세 번째 선택적 매개변수는 비교가 동일할 수 있는지 여부를 지정합니다. 🎜rrreee🎜 또한 몇 가지 도우미 메서드가 제공되며 이름에서 의미를 이해할 수 있습니다. 🎜rrreee🎜🎜diffForHumans🎜🎜🎜🎜 "1개월 전"이 "30일 전"보다 읽기 쉽습니다. 많은 날짜 라이브러리가 이 공통 함수를 제공합니다. 날짜가 구문 분석된 후에는 네 가지 가능성이 있습니다: 🎜🎜1. 비교된 시간이 현재 기본 시간을 초과하는 경우 🎜🎜
🎜2. 미래 시간과 현재 기본 시간을 비교할 때🎜🎜
🎜3. 비교된 값이 다른 값을 초과하는 경우🎜🎜
🎜4. 비교된 값이 다른 값 뒤에 오는 경우🎜🎜
🎜 두 번째 매개변수를 true로 설정하면 "이전", "지금부터" 등을 삭제할 수 있습니다. 수정자:
diffForHumans(Carbon $other, true)
. 🎜rrreee🎜🎜🎜현지화🎜🎜🎜
可以在 app/Providers/AppServiceProvider.php 的 boot()
方法中添加下面的代码来设置全局本地化:
1 2 3 4 | public function boot()
{
\Carbon\Carbon::setLocale('zh');
}
|
로그인 후 복사
로그인 후 복사
设置好之后,在输出时间的地方调用:
1 | $article ->created_at->diffForHumans();
|
로그인 후 복사
로그인 후 복사
类似的格式即可。
更多 Carbon 操作,可查看文档。
위 내용은 Laravel의 날짜 및 시간 처리 패키지인 Carbon의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!