Laravel 本地化日期格式(模式)

Laravel localized date formatting (pattern)

我想设置 Laravel 和 Carbon,以便根据用户选择的当前语言环境,日期将被格式化为正确的模式。我认为在所需的语言环境上设置 LC_TIME 就足够了,然后使用 Carbon 方法 toDateString 来获得正确的格式,但是,无论 LC_TIME 设置如何,它始终 return 格式为 yyyy-mm-dd 的日期字符串。

预期结果:
- 如果选择意大利语,则 mm/dd/yyyy
- 如果选择英语,则 yyyy-mm-dd
- 等等

我正在使用 Laravel 5.5 和 Carbon 1.36.1

最近我的旧 Laravel 应用程序遇到了同样的问题,我们通过将本地化日期的格式存储在单独的语言文件中解决了这个问题:

resources/lang/en/dates.php

return [
    'full' => 'Y-m-d'
];

resources/lang/it/dates.php

return [
    'full' => 'm/d/Y'
];

格式化日期时,只需使用 config() 助手获取为 config/app.php 中设置的语言提供的格式,使用 $date->format(trans('dates.full')) 它将 return正确的本地化日期。

如果您喜欢,也可以使用 macro(在 1.26.0 中添加)来简化此过程:

Carbon::macro('localisedFormat', function ($key) {
    return $this->format(trans("dates.{$key}"));
});

并通过

访问它
$date->localisedFormat('full');
Carbon::now()->isoFormat('L');

为您提供当前语言环境的当前标准数字格式日期("it_IT" 为 20/5/2020,"en_US" 为 5/20/2020)。

并且您可以在翻译中为给定的语言环境自定义此格式:

Translator::get('en')->setTranslations([
  'formats' => [
    'L' => 'YYYY-MM-DD',
  ],
]);