我的任务是做一个输入,让用户可以在一个字段中输入天数和hh:mm:ss,如dd:hh:mm:ss,但通过Moment.js文档,这样的格式似乎并不存在。有没有办法让我自己做一个变通的方法?
更新。
我找到了一种方法,可以用duration来精确地按照我的要求格式化字符串。moment.duration(
days + '.' + hours + ':' + minutes + ':' + sec).format('dd HH:mm:ss'));
(这很丑陋,但我可以稍后修复这部分,重要的是它能用)。
我使用duration:创建了要在html中显示的元素。
const input = document.createElement('input');
input.setAttribute('data-inputmask', '"alias": "datetime", "placeholder": "_", "inputFormat": "dd HH:MM:ss"');
input.value = value;
这产生了一个输入值,看起来像这样。01 00:00:00
但是当我尝试删除日期字段时(01
),它循环回到上个月的最后一天。
我需要的结果是 __ 00:00:00
(_
是我在字段中的空值的占位符),或者我需要删除该字段的能力,当日期在 01
更新2。
似乎我可以通过使用以下方法达到预期的结果: input.setAttribute('data-inputmask', '"alias": "datetime", "placeholder": "_", "inputFormat": "yy HH:MM:ss"');
但有没有一种更优雅的方式来设置输入格式属性?我不想使用 yy
来设置我的日期值。
你可以操纵moment.js提供的标记来显示你想要的时间和日期,比如你的案例。
moment().format("dddd, h:mm:ss");
我已经链接了文档中的显示部分,你也可以在那里找到更多的方法。更多信息在这里
你需要处理天'手动'。
在输入被改变后。
.add(n, 'days')
// 12 days from now @ 13:30:00
console.log(format('12:13:30:00'));
// 120 days from now @ 12:11:11
console.log(format('120:12:11:11'));
// -1 days (yesterday) @ 10:00:00
console.log(format('-1:10:00:00'));
function format(input) {
// Get number of days
let days = input.substr(0, input.indexOf(':'));
// Create momentjs
let mom = new moment(input.replace(days, ''), 'HH:mm:SS')
// Add days
mom.add(days, 'days');
// Return human readable
return mom.format('lll');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
提供您的自定义格式作为第二个参数(格式化)来创建一个 momentjs
基于用户格式的对象。momentjs
字符串 + 格式;