J'essayais d'arrondir l'objet temporel moment.js au prochain intervalle de 30 minutes le plus proche. Mais regarde ma logique nous a tort. Est ce que quelqu'un peut m'aider . Ex:
10:13am -> 10:30am
11:45am -> 12:00pm
Voici mon code actuel
start = moment();
minuteReminder = start.minute() % 30;
start.add(minuteReminder, 'minutes');
start.format("D YYYY, h:mm:ss a");
const start = moment('2018-12-08 09:42');
const remainder = 30 - (start.minute() % 30);
const dateTime = moment(start).add(remainder, "minutes").format("DD.MM.YYYY, h:mm:ss a");
console.log(dateTime);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
Des millions de façons de le faire. Vous n'avez pas besoin de moment.js vraiment. Quoi qu'il en soit, en voici un.
Sur la base des réponses et commentaires de @Volune et @Cabloo, une version mise à jour peut ressembler à:
function round(date, duration, method) {
return moment(Math[method]((+date) / (+duration)) * (+duration));
}
Ce qui peut alors être utilisé comme:
var date = moment();
var roundedDate = round(date, moment.duration(15, "minutes"), "ceil");
Une solution générique:
var ROUNDING = 30 * 60 * 1000; /*ms*/
start = moment();
start = moment(Math.ceil((+start) / ROUNDING) * ROUNDING);
start.format("D YYYY, h:mm:ss a");
Vous pouvez remplacer la variable ROUNDING
de 30 minutes par celle que vous souhaitez et modifier Math.ceil
par Math.round
ou Math.floor
si vous souhaitez utiliser une autre méthode pour arrondir la valeur.
Vous pouvez le faire par une simple clause if-else:
if(moment().minute()> 30){
var myTime = moment().minute(30).second(0);
}else{
var myTime = moment().minute(0).second(0);
}
même si la question a été résolue, j'aimerais partager ma solution aussi.
var moment = require('moment');
const roundToNearestXXMinutes = (dateTime, roundTo) => {
let remainder = roundTo - (start.minute()+ start.second()/60) % roundTo ;
//console.log(moment(start).format("DD.MM.YYYY HH:mm:ss"));
remainder = (remainder > roundTo/2) ? remainder = -roundTo + remainder : remainder;
const changedDate = moment(start).add(remainder, "minutes" ).seconds(0).format("DD.MM.YYYY HH:mm:ss");
//console.log('is changed to');
//console.log(changedDate);
}
roundToNearestXXMinutes(new Date("October 13, 2014 23:46:00"), 10);