gpt4 book ai didi

javascript - 是否可以编辑 Moment#to 输出的粒度?

转载 作者:行者123 更新时间:2023-11-30 11:41:23 25 4
gpt4 key购买 nike

使用 MomentJS 的 Moment#to 方法,有什么方法可以控制输出吗?

var opens = moment('Tue 8:00:00am', 'ddd h:mm:ssa')

var now1 = moment('Tue 7:43:30am', 'ddd h:mm:ssa')
console.log(now1.to(opens)) // in 17 minutes

var now2 = moment('Tue 7:43:31am', 'ddd h:mm:ssa')
console.log(now2.to(opens)) // in 16 minutes
<script src="https://unpkg.com/moment@2.17.1/min/moment.min.js"></script>

我希望 now2.to(opens) 在比较时忽略秒数,因此它会“在 17 分钟内”返回。

我觉得这是不可能的,因为 moment docs不要列出任何适用的参数。

Moment#isBefore 和 friend 采用第二个可选参数来限制比较的粒度(例如,Moment#isBefore(otherMoment, 'minute') 将比较时忽略秒和毫秒。


编辑:我的最终目标是仅在分钟更改时更改“N 分钟内”消息,而不是在 31 秒时更改。

在我上面的例子中,当源时刻在 :30 时,我有“17 分钟内”,在 :31 时有“16 分钟内”。


编辑 2: 在我的应用程序中,我的左手力矩取自 moment(),因此它继承自环境。我的右手时刻是从没有秒的字符串中解析出来的。我不确定此信息的相关性如何,这就是我将其排除在原始问题之外的原因。

最佳答案

自定义时刻如何显示相对时间的官方方法是使用 relativeTimeRoundingrelativeTimeThreshold (如果需要的话,还有 moment.updateLocalerelativeTime 键)。

在您的情况下,要获得所需的输出,您可以将舍入函数设置为 Math.floor(默认 Math.round)并将第二个阈值设置为 60(默认45).

这里是一个活生生的例子:

var opens = moment('Tue 8:00:00am', 'ddd h:mm:ssa');
var now1 = moment('Tue 7:43:30am', 'ddd h:mm:ssa');
var now2 = moment('Tue 7:43:31am', 'ddd h:mm:ssa');
var now3 = moment('Tue 7:44:01am', 'ddd h:mm:ssa');

console.log(now1.to(opens)); // in 17 minutes
console.log(now2.to(opens)); // in 16 minutes
console.log(now3.to(opens)); // in 16 minutes

// Change relative time rounding
moment.relativeTimeRounding(Math.floor);
// Set 1 minute = 60 seconds (default 45)
moment.relativeTimeThreshold('s', 60);

console.log(now1.to(opens)); // in 16 minutes
console.log(now2.to(opens)); // in 16 minutes
console.log(now3.to(opens)); // in 15 minutes
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

关于javascript - 是否可以编辑 Moment#to 输出的粒度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42513276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com