【问题标题】:Laravel localized date formatting (pattern)Laravel 本地化日期格式(模式)
【发布时间】:2020-05-11 15:04:03
【问题描述】:

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

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

我正在使用 Laravel 5.5 和 Carbon 1.36.1

【问题讨论】:

    标签: laravel date format tostring php-carbon


    【解决方案1】:
    Carbon::now()->isoFormat('L');
    

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

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

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

    【讨论】:

      【解决方案2】:

      最近我在使用旧的 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')),它将返回正确的本地化日期。

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

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

      并通过

      访问它
      $date->localisedFormat('full');
      

      【讨论】:

      • 不应该$date->format(config('dates.full'))$date->format(trans('dates.full'))
      • 你说得对。我解决这个问题。很高兴能帮到你!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多