bgu*_*uiz 51 javascript time momentjs
你如何四舍五入/圆下来momentjs时刻最接近的分钟数?
我检查了文档,但似乎没有这方法.
请注意,我不希望将字符串四舍五入到最接近的分钟,我想要moment
返回(或修改到位,也可以).我不想转换为字符串,转换回来也是如此.
谢谢.
根据要求,这里有一些代码:
var now = new moment(new Date());
if (now.seconds() > 0) {
now.add('minutes', -1);
}
now.seconds(0);
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我已经设法在这里手动完成了这一刻,但它似乎相当hacky.只是在一种更优雅的方式实现这一目标.
Liy*_*ali 80
要向上舍入,您需要添加一分钟然后将其向下舍入.要向下舍入,只需使用该startOf
方法.
请注意使用三元运算符来检查时间是否应该舍入(例如,点上的13:00:00不需要舍入).
var m = moment('2017-02-17 12:01:01');
var roundDown = m.startOf('minute');
console.log(roundDown.toString()); // outputs Tue Feb 17 2017 12:01:00 GMT+0000
var m = moment('2017-02-17 12:01:01');
var roundUp = m.second() || m.millisecond() ? m.add(1, 'minute').startOf('minute') : m.startOf('minute');
console.log(roundUp.toString()); // outputs Tue Feb 17 2017 12:02:00 GMT+0000
Run Code Online (Sandbox Code Playgroud)
var m = moment('2017-02-17 12:59:59');
var roundDown = m.startOf('hour');
console.log(roundDown.toString()); // outputs Tue Feb 17 2017 12:00:00 GMT+0000
var m = moment('2017-02-17 12:59:59');
var roundUp = m.minute() || m.second() || m.millisecond() ? m.add(1, 'hour').startOf('hour') : m.startOf('hour');
console.log(roundUp.toString()); // outputs Tue Feb 17 2017 13:00:00 GMT+0000
Run Code Online (Sandbox Code Playgroud)
bgu*_*uiz 22
部分答案:
要舍入到最近时刻分钟:
var m = moment();
m.startOf('minute');
Run Code Online (Sandbox Code Playgroud)
但是,相当于四舍五入endOf
,并不能完全给出预期的结果.
mar*_*rds 13
通过添加半小时然后运行.startOf('hour')可以实现舍入到最接近的小时.任何时间测量都是一样的.
var now = moment();
// -> Wed Sep 30 2015 11:01:00
now.add(30, 'minutes').startOf('hour'); // -> Wed Sep 30 2015 11:31:00
// -> Wed Sep 30 2015 11:00:00
var now = moment();
// -> Wed Sep 30 2015 11:31:00
now.add(30, 'minutes').startOf('hour'); // -> Wed Sep 30 2015 12:01:00
// -> Wed Sep 30 2015 12:00:00
Run Code Online (Sandbox Code Playgroud)
Tri*_*ran 12
该roundTo功能可以使之成为未来的版本.
例子:
moment().roundTo('minute', 15); // output: 12:45
moment().roundTo('minute', 15, 'down'); // output: 12:30
Run Code Online (Sandbox Code Playgroud)
简单.正如许多其他人所说,只需使用Moment.startOf:
var roundDown = moment('2015-02-17 12:59:59').startOf('hour');
roundDown.format('HH:mm:SS'); // 12:00:00
Run Code Online (Sandbox Code Playgroud)
重要的是,这也可以按预期工作:
var roundDown = moment('2015-02-17 12:00:00').startOf('hour');
roundDown.format('HH:mm:SS'); // 12:00:00
Run Code Online (Sandbox Code Playgroud)
稍微棘手,如果我们想圆了一个合适的天花板功能:例如,按小时围捕的时候,我们要12:00:00
围捕到12:00:00
.
var roundUp = moment('2015-02-17 12:00:00').add(1, 'hour').startOf('hour');
roundUp.format('HH:mm:SS'); // ERROR: 13:00:00
Run Code Online (Sandbox Code Playgroud)
function roundUp(momentObj, roundBy){
if (momentObj.millisecond() != 1){
momentObj.subtract(1,'millisecond');
}
return momentObj.add(1, roundBy).startOf(roundBy);
}
var caseA = moment('2015-02-17 12:00:00');
roundUp(caseA, 'minute').format('HH:mm:SS'); // 12:00:00
var caseB = moment('2015-02-17 12:00:00.001');
roundUp(caseB, 'minute').format('HH:mm:SS'); // 12:01:00
var caseC = moment('2015-02-17 12:00:59');
roundUp(caseC, 'minute').format('HH:mm:SS'); // 12:01:00
Run Code Online (Sandbox Code Playgroud)
更准确的答案:
t.add(30, 'seconds').startOf('minute')
Run Code Online (Sandbox Code Playgroud)
案例 1:如果秒数 < 30,则向下舍入
t = moment(); //12:00:05
t.add(30, 'seconds').startOf('minute') //12:00:00
Run Code Online (Sandbox Code Playgroud)
案例 2:如果秒数 >= 30,则向上舍入
t = moment(); //12:00:33
t.add(30, 'seconds').startOf('minute') //12:01:00
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
46713 次 |
最近记录: |