knplabs / knp-time-bundle
使您的日期和持续时间看起来合理且具有描述性
v2.4.0
2024-06-11 09:38 UTC
Requires
- php: >=8.1
- symfony/config: ^5.4|^6.0|^7.0
- symfony/dependency-injection: ^5.4|^6.0|^7.0
- symfony/translation: ^5.4|^6.0|^7.0
Requires (Dev)
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^9.6
- symfony/framework-bundle: ^5.4|^6.0|^7.0
- symfony/phpunit-bridge: ^5.4|^6.0|^7.0
- symfony/twig-bundle: ^5.4|^6.0|^7.0
Suggests
- symfony/twig-bundle: to use the Twig `time_diff()` function and `|time_diff`/`|duration` filter
Conflicts
- phpunit/phpunit: <8.0
This package is auto-updated.
Last update: 2024-09-11 10:12:36 UTC
README
友好的 ago/until 日期 ("5分钟前" 或 "5分钟后") 和 durations ("2分钟")!
Last edited: {{ post.updatedAt|time_diff }} <!-- Last edited: 1 week ago --> Event date: {{ event.date|time_diff }} <!-- Event date: in two weeks --> Read time: {{ post.readTimeInSeconds|duration }} <!-- Read time: 2 minutes --> Age: {{ user.birthdate|age }} <!-- Age: 30 years old -->
想要在屏幕录像中看到它的使用吗?请查看 SymfonyCasts: https://symfonycasts.com/screencast/symfony-doctrine/ago
格式化的日期/持续时间可以翻译成任何语言,许多语言默认支持。
安装
使用 Composer 安装库
composer require knplabs/knp-time-bundle
哇!你做到了!假设你的项目使用 Symfony Flex,该捆绑包应该已配置并准备好使用。如果不是,你可以手动启用 Knp\Bundle\TimeBundle\KnpTimeBundle
。
用法
Twig
时间格式化
{{ someDateTimeVariable|time_diff }} {# 2 weeks ago #} {# |ago is an alias for |time_diff #} {{ someDateTimeVariable|ago }} {# 1 second ago #} {# ... or use the equivalent function: #} {{ time_diff(someDateTimeVariable) }} {# in 2 months #}
注意:`time_diff` 过滤器/函数和 `ago` 别名也适用于未来的日期。
持续时间格式化
{{ someDurationInSeconds|duration }} {# 2 minutes #}
年龄格式化
{# with filter: #} Age: {{ user.birthdate|age }} {# Age: 30 years old #} {# ... or use the equivalent function: #} Age: {{ age(user.birthdate) }} {# Age: 30 years old #}
服务
您还可以通过自动注入/注入 Knp\Bundle\TimeBundle\DateTimeFormatter
服务在您的服务/控制器中格式化日期和持续时间
use Knp\Bundle\TimeBundle\DateTimeFormatter; // ... public function yourAction(DateTimeFormatter $dateTimeFormatter) { $someDate = new \DateTimeImmutable('-2 years'); // or $entity->publishedDate() $toDate = new \DateTimeImmutable('now'); $agoTime = $dateTimeFormatter->formatDiff($someDate, $toDate); // $toDate parameter is optional and defaults to "now" $readTime = $dateTimeFormatter->formatDuration(64); // or $entity->readTimeInSeconds() $ageTime = $dateTimeFormatter->formatAge($someDate, $toDate); // $toDate parameter is optional and defaults to "now" return $this->json([ // ... 'published_at' => $agoTime, // 2 years ago 'read_time' => $readTime, // 1 minute // ... ]); }
控制翻译区域
捆绑包将自动使用当前区域设置来翻译 "time_diff" ("ago") 和 "duration" 消息。但是,您可以覆盖区域设置
{{ someDateTimeVariable|time_diff(locale='es') }} {{ someDurationInSeconds|duration(locale='es') }} {{ someDateTimeVariable|age(locale='es') }}
测试
如果您想运行测试,请确保您已安装了开发依赖项。
./vendor/bin/phpunit
维护者
任何人都可以为这个存储库做出贡献(并且热烈欢迎!)以下人员维护并可以合并到这个库中