knplabs/knp-time-bundle

使您的日期和持续时间看起来合理且具有描述性

安装数: 6,379,646

依赖者: 39

建议者: 4

安全: 0

星标: 602

关注者: 34

分支: 105

开放问题: 12

类型:symfony-bundle

v2.4.0 2024-06-11 09:38 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

维护者

任何人都可以为这个存储库做出贡献(并且热烈欢迎!)以下人员维护并可以合并到这个库中