如何创建将字节转换为KB,MB,GB等的宏

时间:2011-11-30 17:24:56

标签: symfony twig

我的页面中有一个视频,我们可以下载它,在下载链接旁边,我有一个显示视频大小的数字。

现在我以字节为单位,我希望将其转换为KB,MB或GB。根据我的理解,最好的方法是使用宏。

{% macro downloadSize(bytes) %}
{% spaceless %}
     {% set bytes = x/1024 %}

     {% if bytes < 1024 %}
       KB
     {% endif %}
     ...    
{% endspaceless %}
{% endmacro %}

我知道我没有太多,但我真的需要语法方面的帮助以及如何实现这一点。我希望我的最终价值像“12.2 MB”

2 个答案:

答案 0 :(得分:4)

正如@Flukey所提到的,方法是创建一个扩展名。

我做过这个练习。只需转到

https://github.com/BrazilianFriendsOfSymfony/BFOSTwigExtensionsBundle

并获得扩展名。

答案 1 :(得分:2)

老问题,但对于其他任何人 - &gt; 如果因为任何原因你不想干涉TwigExtensions ,这就是宏的样子:

{% macro bytesToSize(bytes) %}
{% spaceless %}
    {% set kilobyte = 1000 %}
    {% set megabyte = kilobyte * 1000 %}
    {% set gigabyte = megabyte * 1000 %}
    {% set terabyte = gigabyte * 1000 %}
    {% set petabyte = terabyte * 1000 %}

    {% if bytes < kilobyte %}
        {{ bytes ~ ' B' }}
    {% elseif bytes < megabyte %}
        {{ (bytes / kilobyte)|number_format(2, '.') ~ ' KB' }}
    {% elseif bytes < gigabyte %}
        {{ (bytes / megabyte)|number_format(2, '.') ~ ' MB' }}
    {% elseif bytes < terabyte %}
        {{ (bytes / gigabyte)|number_format(2, '.') ~ ' GB' }}
    {% elseif bytes < petabyte %}
        {{ (bytes / terabyte)|number_format(2, '.') ~ ' TB' }}
    {% else %}
        {{ (bytes / petabyte)|number_format(2, '.') ~ ' PB' }}
    {% endif %}
{% endspaceless %}
{% endmacro %}

编辑:修改脚本以匹配十进制测量(KB,MB,GB ..)而不是二进制(KiB,MiB,GiB ...)。