2009-09-18 1 views
1

Я создаю элемент управления, позволяющий мне установить время встречи, и я бы хотел, чтобы он использовался по умолчанию, текущее время округлено до ближайшего 15-минутного интервала. Поэтому, если в настоящий момент это 6:07, в качестве времени начала будет читаться 6:15.Круглый Дата до ближайшего 15-минутного интервала в Flex

Кто-нибудь знает, как это может быть выполнено, или пробежал фрагмент кода, который поместил бы меня на правильный путь?

ответ

2

Попробуйте

var date:Date = new Date(); 
var min:Number = date.minutes; 
var h:Number = date.hours; 
min = min + (15 - min % 15); 
h += min/60; 
min = min % 60; 
date.hours = h; 
date.minutes = min; 
trace(date.toTimeString()); 
+0

Спасибо! Это работает очень хорошо. Я пошел дальше и немного изменил его до следующего, что позволяет мне указать интервал: защищенная функция roundTimeToInterval (дата: дата, интервал: int): дата { \t var min: Number = date.minutes; \t var h: Number = date.hours; \t min = min + (интервал - мин.% Интервал); \t h + = min/60; \t min = min% 60; \t дата.часов = h; \t date.minutes = min; \t \t дата возвращения; } – Nick

+1

-1 Не работает правильно. См. Ответ @Martamius ниже –

1

Я обнаружил, что с ответом Amarghosh является его не совсем круглый правильно. Пример: раунд 7:01 будет 7:15, а не 7:00. Также не будет обрабатывать изменения в датах (пример округления 23:50 до следующего дня) и т. Д.

Это будет делать то, что вы хотите, при обработке меняющихся дней, месяцев и лет даже, а математика немного проще :

protected function roundTimeToMinutes(date:Date, interval:int):Date 
{ 
    var time:Number=date.getTime(); 
    var roundNumerator=60000*interval; //there are 60000 milliseconds in a minute 
    var newTime:Number=(Math.round(time/roundNumerator) * roundNumerator); 
    date.setTime(newTime); 
    return date; 
}