Carbon中国語ドキュメント

8370 ワード

Carbonは日付と時刻処理パッケージです.ここでは、Laravelフレームワークでよく使われる日付と時刻処理パッケージの使用を見てみましょう.
PHPアプリケーションを作成するには、日付と時間を処理する必要があります.この記事では、Carbon–PHP DateTimeクラスから継承されたAPI拡張子について説明します.これにより、処理日と時間がより簡単になります.Laravelでデフォルトで使用される時間処理クラスがCarbonです.
namespace Carbon;
 
class Carbon extends \DateTime
{
    // code here
}

CarbonネーミングスペースのCarbonクラスには、上記のコードクリップが表示されます.
インストール
ComposerでCarbonをインストールできます.
composer require nesbot/carbon

PS:Laravelプロジェクトはこのパッケージがデフォルトでインストールされているため、上記のコマンドを再度実行する必要はありません.使用するには、名前空間を介してCarbonをインポートして使用する必要があります.毎回完全な名前を指定する必要はありません.
use Carbon\Carbon;

現在の時刻を取得now()メソッドとともに現在の日付と時刻を取得できます.パラメータを指定しない場合は、PHP構成のタイムゾーンが使用されます.
echo Carbon::now(); //2016-10-14 20:21:20

異なるタイムゾーンを使用する場合は、パラメータとして有効なタイムゾーンを渡す必要があります.
//        
echo Carbon::now('Europe/London'); //2016-10-14 20:21:20
//   
echo Carbon::now(new DateTimeZone('Europe/London'));

now()のほか、today()、tomorrow()、yesterday()などの静的関数も用意されていますが、いずれも00:00:00:00:00:00:00:00:
echo Carbon::now();                             // 2016-10-14 15:18:34
echo Carbon::today();                            // 2016-10-14 00:00:00
echo  Carbon::tomorrow('Europe/London');                          // 2016-10-14 00:00:00
echo Carbon::yesterday();                         // 2016-10-14 00:00:00

以上の出力結果は、実際にはCarbonタイプの日時オブジェクトです.
Carbon {#179 ?
  +"date": "2016-06-14 00:00:00.000000"
  +"timezone_type": 3
  +"timezone": "UTC"
}

文字列タイプの日付を取得するには、次のコードを使用します.
echo Carbon::today()->toDateTimeString();
echo Carbon::yesterday()->toDateTimeString();
echo Carbon::tomorrow()->toDateTimeString();

日付タイプが文字列に変換されると、デフォルトではCarbonメソッドは日付時間オブジェクトを返します.オブジェクトですが、echoを直接使用して結果を出力できます.なぜなら_toStringマジックメソッド.ただし、文字列に変換するには、toDateStringまたはtoDateTimeStringメソッドを使用します.
echo Carbon::now()->toDateString(); //2016-10-14
echo Carbon::now()->toDateTimeString(); //2016-10-14 20:22:50
    
       parse               (    Carbon          ):
echo Carbon::parse('2016-10-15')->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse('2016-10-15')->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse('2016-10-15 00:10:25')->toDateTimeString(); //2016-10-15 00:10:25
 
echo Carbon::parse('today')->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse('yesterday')->toDateTimeString(); //2016-10-14 00:00:00
echo Carbon::parse('tomorrow')->toDateTimeString(); //2016-10-16 00:00:00
echo Carbon::parse('2 days ago')->toDateTimeString(); //2016-10-13 20:49:53
echo Carbon::parse('+3 days')->toDateTimeString(); //2016-10-18 20:49:53
echo Carbon::parse('+2 weeks')->toDateTimeString(); //2016-10-29 20:49:53
echo Carbon::parse('+4 months')->toDateTimeString(); //2017-02-15 20:49:53
echo Carbon::parse('-1 year')->toDateTimeString(); //2015-10-15 20:49:53
echo Carbon::parse('next wednesday')->toDateTimeString(); //2016-10-19 00:00:00
echo Carbon::parse('last friday')->toDateTimeString(); //2016-10-14 00:00:00

日付を作成するには、個別の年月日を使用して日付を作成することもできます.
$year = '2015';
$month = '04';
$day = '12';
 
echo Carbon::createFromDate($year, $month, $day); //2015-04-12 20:55:59
 
$hour = '02';
$minute = '15':
$second = '30';
 
echo Carbon::create($year, $month, $day, $hour, $minute, $second); //2015-04-12 02:15:30
 
echo Carbon::createFromDate(null, 12, 25);  //         

さらに、最後のパラメータとして有効なタイムゾーンを渡すこともできます.日付操作日付操作は、add(増加)またはsub(減算)が、増加または減算する単位に続くことによって行うことができる.たとえば、指定した日数を日付に追加したい場合は、addDaysメソッドを使用します.さらに、modifyメソッドが提供され、パラメータフォーマットは+または-加算値および単位である.したがって、現在の日付を1年増やしたい場合は、+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('+15 days'); //2016-10-30 14:00:01
echo Carbon::now()->modify('-2 days'); //2016-10-13 14:00:01

日付比較Carbonでは、次の方法で日付を比較できます.min-最小日付を返します.max–最大日付を返します.eq–2つの日付が等しいかどうかを判断します.gt–最初の日付が2番目の日付より大きいかどうかを判断します.lt–最初の日付が2番目の日付より小さいかどうかを判断します.gte–最初の日付が2番目の日付より大きいかどうかを判断します.lte–最初の日付が2番目の日付以下であるかどうかを判断します.
echo Carbon::now()->tzName;                        // America/Toronto
$first = Carbon::create(2012, 9, 5, 23, 26, 11);
$second = Carbon::create(2012, 9, 5, 20, 26, 11, 'America/Vancouver');
 
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 'America/Vancouver'
 
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)

日付が2つの日付の間にあるかどうかを判断するには、between()メソッドを使用します.3番目のオプションパラメータは、比較が等しいかどうかを指定し、デフォルトは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)

また、名前から意味を理解するための補助方法も提供されています.
$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!

diffForHumans
「1ヶ月前」は「30日前」よりも読みやすく、多くの日付ライブラリでこの一般的な機能が提供されています.日付が解析された後、次の4つの可能性があります.
  • 比較時間が現在のデフォルト時間を超える場合:1 5
  • 将来の時間を現在のデフォルト時間と比較する場合:1 ,5
  • 比較値が別の値を超えた場合1時間前5月前
  • 比較値が別の値の後1時間後5月後
  • 2番目のパラメータを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