更改HH:MM:SS的时间格式

时间:2017-03-01 18:28:00

标签: javascript django vuejs2 vue.js

我有一个apj服务于django(django-rest-framework),它将一个电影对象及其相关信息返回到Vue应用程序中。其中一个信息是电影的持续时间。

对象:

{
    "movie_id": 13,
    "duration": "17:52:14",
    ...
    ...
},

组件模板:

<div id="movieDetailSynopsis">
    ...
    ...
    <p>Duration: {{movie.duration}}</p>
</div>

持续时间采用此格式

  

HH:MM:SS

     

例如:02:22:08

但我希望它看起来像是这样

  

2h 22m

无论如何在django或vuejs或javascript中实现此目的?

更新

尝试使用filter globaly

main.js:

new Vue({
    router,
    components: {App},
    template: '<App/>',
    store,
    filters: {
        durationFormat(value) {
            const duration = moment.duration(value);
            return duration.hours() + 'h ' + duration.minutes() + 's';
        }
    }
}).$mount('#app');

在组件模板中:

<div id="movieDetailSynopsis">
    ...
    ...
    <p>Duration: {{movie.duration | durationFormat}}</p>
</div>

但是我收到了一个错误:

  

[Vue警告]:无法解析过滤器:durationFormat   (在匿名组件中找到 - 使用“name”选项以获得更好的调试消息。)

5 个答案:

答案 0 :(得分:1)

这是使用Vue过滤器的好地方。有关过滤器here的更多信息。您可以在组件中全局或本地注册过滤器。

这是一个全局过滤器:

Vue.filter('formatTime', function(value) {
  if (value) {
    const parts = value.split(":");
    return +parts[0] + "h " + +parts[1] + "m";
  } else {
    return "unknown"
  }
});

以下是您在模板中使用它的方法:

<p>Duration: {{movie.duration | formatTime}}</p>

注意:您可以使格式化功能更加健壮 - 这只是一个示例,可以帮助您入门并演示如何在Vue中使用它。正如评论中所提到的,moment.js库非常适合日期/时间解析和操作。

Here's a sample (including using moment.js) in codepen

更新(回应评论)

尝试更新您的main.js以注册过滤器,如下所示:

// register global filter
Vue.filter('durationFormat', function(value) {
  const duration = moment.duration(value);
  return duration.hours() + 'h ' + duration.minutes() + 's';
});

new Vue({
    router,
    components: {App},
    template: '<App/>',
    store,
}).$mount('#app');

答案 1 :(得分:0)

您可以使用以下基本的JavaScript:

var time = "02:22:08";
var timeConverted = parseInt(t.split(':')[0]) + 'h' + ' ' + parseInt(t.split(':')[1]) + 'm';

答案 2 :(得分:0)

我只知道javascript way.try format()方法。

function format(time){
        return time.replace(/(?:0)?(\d+):(?:0)?(\d+).*/,'$1h $2m');
}

["23:12:15","02:03:05"].forEach(function(time){
  console.log(time+" ==> "+format(time));
});

答案 3 :(得分:0)

您可以制作自己的模板标签:

from django import template

register = template.Library()

@register.simple_tag
def convert_time(value):
    t_list = [t for t in value.split(':')]
    return '{}h {}m'.format(int(t_list[0]), t_list[1])

然后在模板中使用它:

{% load your_tags %}
<div id="movieDetailSynopsis">
  ...
  ...
  <p>Duration: {{movie.duration|convert_time}}</p>
</div>

有关详细信息,请查看Django documentation

答案 4 :(得分:0)

您可以创建一个django标记过滤器。你的tagfilter.py

from django import template
register = template.Library()

@register.filter
def tagFilter(duration):
    d = duration.split(":")
    hh,mm,ss = d[0],d[1],d[2]
    return "%sh %sm %ss" % (hh,mm,ss) # If you don't want to show the seconds, you may remove it:
    # "%sh %sm" % (hh,mm)

你的django模板:

<div id="movieDetailSynopsis">
...
...
<p>Duration: {{movie.duration|tagFilter}}</p>