#概要
日付計算が簡単にできるライブラリのCarbon。現在日時と比較して「○分前」みたいなことも標準メソッドが用意されており、超簡単。
とはいえ、デフォルトの言語は英語なので、日本語化するための備忘録です。
#環境
PHP 7.1.3
Carbon 1.22.1
#やること
- 普通に使う(○分前表示)
- 日本語化
- 言語ファイルを差し替える(これがメイン)
以下、サンプル
##普通に使う
echo Carbon::now()->subMinutes(12)->diffForHumans();
#12 minutes ago
echo Carbon::now()->subHours(2)->diffForHumans();
#2 hours ago
echo Carbon::now()->addMinutes(12)->diffForHumans();
#12 minutes from now
echo Carbon::now()->addHours(2)->diffForHumans();
#2 hours from now
##日本語化
一行追加するだけ。でもスペースが気にくわない。
# この一行を追加するだけ。
Carbon::setLocale('ja');
echo Carbon::now()->subMinutes(12)->diffForHumans();
#12 分 前
echo Carbon::now()->subHours(2)->diffForHumans();
#2 時間 前
echo Carbon::now()->addMinutes(12)->diffForHumans();
#今から 12 分
echo Carbon::now()->addHours(2)->diffForHumans();
#今から 2 時間
##言語ファイルを差し替える
情報が見つからず、ソースを見て試行錯誤したorz
もっと良い方法があったら指摘ください。
// 言語リソース差し替え ここから(LaravelならAppServiceProviderとかで行う)
$translator = new \Symfony\Component\Translation\Translator('ja');
$translator->addLoader('array', new \Symfony\Component\Translation\Loader\ArrayLoader());
// 専用の言語ファイルを用意することを推奨(Laravelなら下のようにやる)
// $date_resource = require resource_path(sprintf('lang/%s/date.php', config('app.locale')));
$date_resource = [
'year' => ':count年',
'month' => ':countヶ月',
'week' => ':count週間',
'day' => ':count日',
'hour' => ':count時間',
'minute' => ':count分',
'second' => ':count秒',
'ago' => ':time前',
'from_now' => '今から:time',
'after' => ':time後',
'before' => ':time前'
];
$translator->addResource('array', $date_resource, 'ja');
Carbon::setTranslator($translator);
// 言語リソース差し替え ここまで
echo Carbon::now()->subMinutes(12)->diffForHumans();
#12分前
echo Carbon::now()->subHours(2)->diffForHumans();
#2時間前
echo Carbon::now()->addMinutes(12)->diffForHumans();
#今から12分
echo Carbon::now()->addHours(2)->diffForHumans();
#今から2時間
#補足
未来時間のdiffForHumans()で「今から2時間」って何だ?「2時間後」にした方が良いのか?と思いつつも使う予定はないのでそのままにした。
以上です。