更改 HH:MM:SS 的时间格式
Change time format of HH:MM:SS
我有一个 api 与 django (django-rest-framework) 一起服务,其中 return 一个电影对象及其相关信息进入 Vue 应用程序。其中一项信息是电影时长。
对象:
{
"movie_id": 13,
"duration": "17:52:14",
...
...
},
组件模板:
<div id="movieDetailSynopsis">
...
...
<p>Duration: {{movie.duration}}</p>
</div>
持续时间采用这种格式
HH:MM:SS
eg: 02:22:08
但是我想要的是这样的
2h 22m
有没有办法在 django 或 vuejs 或 javascript 中实现这个?
更新:
尝试使用全局过滤器
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 warn]: Failed to resolve filter: durationFormat
(found in anonymous component - use the "name" option for better debugging messages.)
您可以像这样使用一些基本的 javascript:
var time = "02:22:08";
var timeConverted = parseInt(t.split(':')[0]) + 'h' + ' ' + parseInt(t.split(':')[1]) + 'm';
我只知道 javascript way.try format() 方法。
function format(time){
return time.replace(/(?:0)?(\d+):(?:0)?(\d+).*/,'h m');
}
["23:12:15","02:03:05"].forEach(function(time){
console.log(time+" ==> "+format(time));
});
这是使用 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 库非常适合 date/time 解析和操作。
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');
您可以制作自己的模板标签:
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。
您可以创建一个 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>
我有一个 api 与 django (django-rest-framework) 一起服务,其中 return 一个电影对象及其相关信息进入 Vue 应用程序。其中一项信息是电影时长。
对象:
{
"movie_id": 13,
"duration": "17:52:14",
...
...
},
组件模板:
<div id="movieDetailSynopsis">
...
...
<p>Duration: {{movie.duration}}</p>
</div>
持续时间采用这种格式
HH:MM:SS
eg: 02:22:08
但是我想要的是这样的
2h 22m
有没有办法在 django 或 vuejs 或 javascript 中实现这个?
更新:
尝试使用全局过滤器
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 warn]: Failed to resolve filter: durationFormat (found in anonymous component - use the "name" option for better debugging messages.)
您可以像这样使用一些基本的 javascript:
var time = "02:22:08";
var timeConverted = parseInt(t.split(':')[0]) + 'h' + ' ' + parseInt(t.split(':')[1]) + 'm';
我只知道 javascript way.try format() 方法。
function format(time){
return time.replace(/(?:0)?(\d+):(?:0)?(\d+).*/,'h m');
}
["23:12:15","02:03:05"].forEach(function(time){
console.log(time+" ==> "+format(time));
});
这是使用 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 库非常适合 date/time 解析和操作。
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');
您可以制作自己的模板标签:
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。
您可以创建一个 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>