2017-09-13 93 views
1

我将整数转换为小枝模板系统中的时间格式。所以秒的总持续时间被转换为hh:mm:ss小枝模板添加领先的零与过滤器

下面是一个例子,我怎么转换时间:

{% filter round(0, 'floor') %}{{ agent.TotalCallDuration/3600 }}{% endfilter %} 

现在我要补充前导零的小时,如果低于10,我想:

{% filter round(0, 'floor')|format('%02d') %}{{ agent.TotalCallDuration/3600 }}{% endfilter %} 

,但没有运气。 。

回答

0

使用date滤波器timezone参数设置为false

{{ agent.TotalCallDuration | date("H:i:s", false) }} 

对于更大的值超过24小时

上述解决方案仅如果秒数较小比86400秒(24小时)。对于更大的值,我会使用gmdate功能,例如:

$twig->addFilter(new Twig_Filter('duration', function ($x) { 
    return $x >= 86400 ? gmdate('d:H:i:s', $x - 86400) : gmdate('H:i:s', $x); 
})); 

其中$twigTwig_Environment实例编写一个简单的过滤器。

用法:

{{ agent.TotalCallDuration | duration }} 

其中, “天” 在小时(hh:mm:ss)表示又如:

$twig->addFilter(new Twig_Filter('duration', function ($x) { 
    if ($x < 86400) { 
     return gmdate('H:i:s', $x); 
    } 

    $hours = gmdate('G', $x); 
    $days = (gmdate('d', $x) - 1) * 24 + $hours; 
    return $days . gmdate(':i:s', $x); 
})); 

思想是从this answer服用。

+0

哇,这是完美的,谢谢! – johnohod

+0

进一步审查。它不起作用。我有一个例子,其中agent.TotalCallDuration = 336651,它被转换为:21:30:51,当它应该已经远高于95小时。 – johnohod

+0

@johnohod,我已经更新了答案 –