目前我的代码如下所示:
moment.duration(res.duration, "years").format("Y [years] M [months]"); //Input 0.08 outputs 0
当 res.duration < 0 时,它仅返回 0。 我尝试将我的代码修改为
moment.duration(res.duration, 'months').format("M [months]"); //Input 0.08 outputs 0
但似乎仍然不起作用。
知道如何将 0.08 完美转换为 1 吗?
最佳答案
问题是 0.08
年不是 1 个月,而是 0.96
个月,因此您必须对其进行四舍五入。
不幸的是moment-duration-format (我假设您正在使用)只能截断持续时间的值,将负整数传递给 precision
选项。
可能的解决方案:
- 存储更高精度的值,而不是按小数点后第二位四舍五入。这是使用
0.08
和0.08333333333333333
的实例。 (参见month()
和toISOString()
)
var dur = moment.duration(0.08, "years");
console.log(dur.format('M [Months]'));
console.log(dur.months());
console.log(dur.toISOString());
// More decimal gives 1 month
dur = moment.duration(0.08333333333333333, "years");
console.log(dur.format('M [Months]'));
console.log(dur.months());
console.log(dur.toISOString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>
- 使用时刻
humanize()
。您可以按照 Relative Time 中所述自定义输出。 , Relative Time Thresholds和 Relative Time Rounding文档部分。
moment.updateLocale('en', {
relativeTime : {
M: "1 month",
MM: "%d months"
}
});
var dur = moment.duration(0.08, "years");
console.log(dur.humanize());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
关于jquery - 如何使用 moment.js 将年转换为月?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47909997/