Moment: κ°€μž₯ κ°€κΉŒμš΄ 15λΆ„ κ°„κ²©μœΌλ‘œ λ°˜μ˜¬λ¦Όν•©λ‹ˆλ‹€.

에 λ§Œλ“  2013λ…„ 07μ›” 27일  Β·  18μ½”λ©˜νŠΈ  Β·  좜처: moment/moment

κ°€μž₯ κ°€κΉŒμš΄ 15λΆ„ κ°„κ²©μœΌλ‘œ 반올림 λ˜λŠ” λ‚΄λ¦Όν•˜λŠ” 방법이 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. datejs와 같은 일뢀 λΌμ΄λΈŒλŸ¬λ¦¬μ—λŠ” 검색할 λ•Œ λ³Έ 것과 같은 κΈ°λŠ₯이 있기 λ•Œλ¬Έμ— 이 κΈ°λŠ₯이 곧 있으면 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€. λ‚΄ μ‹œλ‚˜λ¦¬μ˜€λŠ” 15λΆ„ λ²„ν‚·μœΌλ‘œ λΆ„ν• λœ 데이터 ν¬μΈνŠΈκ°€ μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 선택 λ„κ΅¬λŠ” μ‹œκ°„ 블둝을 λ°˜ν™˜ν•˜κ³  κ°€μž₯ κ°€κΉŒμš΄ 15λΆ„μœΌλ‘œ λ°˜μ˜¬λ¦Όν•˜κ³  μ’…λ£Œ μ‹œκ°„μ„ λ°˜μ˜¬λ¦Όν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ΄λ ‡κ²Œ ν•˜λ©΄ (http://stackoverflow.com/questions/4968250/how-to-round-time-to-the-nearest-quarter-hour-in-javascript) κ³ ν†΅μŠ€λŸ¬μšΈ 것 κ°™μŠ΅λ‹ˆλ‹€. lib μžμ²΄μ— 있으면 μœ μš©ν•©λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ³΅μž‘ν•˜κ³  κ°„λ‹¨ν•œ μˆ˜ν•™μ΄ ν•„μš” μ—†μŠ΅λ‹ˆλ‹€.

const rounded = Math.round(moment().minute() / 15) * 15;
const roundedDown = Math.floor(moment().minute() / 15) * 15;
const roundedUp = Math.ceil(moment().minute() / 15) * 15;

moment().minute(roundedUp).second(0)

κ°€μž₯ κ°€κΉŒμš΄ 15λΆ„ λΆ„κΈ°λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.

λͺ¨λ“  18 λŒ“κΈ€

moment.fn.roundMinutes = function () { return ~(this.minutes() / 15) * 15; }

λ‚˜λŠ” 이것을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 이것을 λ§Œλ“€μ—ˆκ³  λ‹€λ₯Έ μ‚¬λžŒλ“€μ—κ²Œ 도움이 될 수 μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ κ°€κΉŒμš΄ NEXT 15λΆ„μœΌλ‘œ λ°˜μ˜¬λ¦Όλ©λ‹ˆλ‹€.

moment.fn.roundNext15Min = function () {
var intervals = Math.floor(this.minutes() / 15);
if(this.minutes() % 15 != 0)
    intervals++;
    if(intervals == 4) {
        this.add('hours', 1);
        intervals = 0;
    }
    this.minutes(intervals * 15);
    this.seconds(0);
    return this;
}

νŽΈμ§‘: this.add('hours', 1)λ₯Ό μœ„ν•΄ this.incrementHours()λ₯Ό μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€.

μˆœκ°„μ— 이 ν•¨μˆ˜λ₯Ό μΆ”κ°€ν•  수 μžˆλ‚˜μš”.. κ°€μž₯ κ°€κΉŒμš΄ λ‹€μŒ, 이전 μ‹œκ°„ κ°„κ²©μœΌλ‘œ λ°˜μ˜¬λ¦Όν•  수 μžˆλ‹€λ©΄ 정말 쒋을 κ²ƒμž…λ‹ˆλ‹€... 이에 λŒ€ν•œ 수백만 개의 Google 결과와 수백 개의 μŠ€νƒ μ˜€λ²„ν”Œλ‘œ μ°¬μ„±ν‘œκ°€ μžˆμŠ΅λ‹ˆλ‹€..

이제 λ‹€μ‹œ λ³΄λ‹ˆ incrementHoursκ°€ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ „ν˜€ λͺ¨λ¦…λ‹ˆλ‹€.
μˆ˜μ •λœ μ½”λ“œλ‘œ λ¬Έμ œμ— λŒ€ν•œ κ²Œμ‹œλ¬Όμ„ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€. 즐기닀!

2014λ…„ 3μ›” 10일 μ›”μš”μΌ μ˜€ν›„ 2μ‹œ 29λΆ„, Blake Niemyjski
μ•Œλ¦Ό@github.comμž‘μ„± :

incrementHours의 κΈ°λŠ₯은 λ¬΄μ—‡μ΄μ—ˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 그것이 λ˜ν•œ 일을 ν–ˆλ‹€κ³  μΆ”μΈ‘ν•œλ‹€
도.

이 이메일에 직접 λ‹΅μž₯ν•˜κ±°λ‚˜ Gi tHubhttps://github.com/moment/moment/issues/959#issuecomment -37223821μ—μ„œ ν™•μΈν•˜μ„Έμš”.
.

@zbarnett 방법에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λ‚΄ ν”„λ‘œμ νŠΈμ— μ •ν™•νžˆ ν•„μš”ν•œ 것

startOf(15, 'm') 와 같은 startOf μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  μœ λ‹›μ—μ„œ μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€. PR을 기닀리고 μžˆμŠ΅λ‹ˆλ‹€ :)

λ‹€μŒμ€ 맀우 κ°„λ‹¨ν•œ κ³΅μ‹μž…λ‹ˆλ‹€(Coffeescript κ΅¬λ¬Έμ—μ„œ, 이 λ¬Έμ œκ°€ λ°œμƒν•œ μ»¨ν…μŠ€νŠΈμ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€).

round_interval = 15
remainder = time.minute() % round_interval
time.subtract('minutes', remainder).add('minutes', if remainder > round_interval / 2 then round_interval else 0)

λ‚˜λŠ” μ§€κΈˆ λ‹€λ₯Έ 일둜 μΆ©λΆ„νžˆ λ°”μ˜μ§€λ§Œ λˆ„κ΅°κ°€ 이 μ½”λ“œλ₯Ό κ°€μ Έμ™€μ„œ PR에 λ°”λ‘œ λ„£κ³  μ‹Άλ‹€λ©΄ 자유둭게 ν•˜μ‹­μ‹œμ˜€.

#1595 μ°¬μ„±μœΌλ‘œ 마감

λ³΅μž‘ν•˜κ³  κ°„λ‹¨ν•œ μˆ˜ν•™μ΄ ν•„μš” μ—†μŠ΅λ‹ˆλ‹€.

const rounded = Math.round(moment().minute() / 15) * 15;
const roundedDown = Math.floor(moment().minute() / 15) * 15;
const roundedUp = Math.ceil(moment().minute() / 15) * 15;

moment().minute(roundedUp).second(0)

κ°€μž₯ κ°€κΉŒμš΄ 15λΆ„ λΆ„κΈ°λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.

@janwerkhoven 의 μ†”λ£¨μ…˜μ΄ μž‘λ™ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

function round15(minute) {
  let intervals = [15, 30, 45, 59, 0];
  let closest;
  let min = 90;

  for (let i = 0; i < intervals.length; i++) {
    let iv = intervals[i];
    let maybeMin = Math.abs(minute - iv);

    if (maybeMin < min) {
      min = maybeMin;
      closest = iv;
    }
  }

  if (closest === 59) {
    closest = 0;
  }

  return closest;
}

let myMoment = moment();
myMoment.minutes(round15(myMoment.minutes()));

@ground5hark

function nearestMinutes(interval, someMoment){
  const roundedMinutes = Math.round(someMoment.clone().minute() / interval) * interval;
  return someMoment.clone().minute(roundedMinutes).second(0);
}

function nearestPastMinutes(interval, someMoment){
  const roundedMinutes = Math.floor(someMoment.minute() / interval) * interval;
  return someMoment.clone().minute(roundedMinutes).second(0);
}

function nearestFutureMinutes(interval, someMoment){
  const roundedMinutes = Math.ceil(someMoment.minute() / interval) * interval;
  return someMoment.clone().minute(roundedMinutes).second(0);
}

const now = moment();
const nearest5min = nearestMinutes(5, now);
const nearest15min = nearestMinutes(15, now);
const nearest30min = nearestMinutes(30, now);
const nearestFuture5min = nearestFutureMinutes(5, now);
const nearestPast5min = nearestPastMinutes(5, now);

μ½”λ“œ νŽœμ—μ„œ ν…ŒμŠ€νŠΈλ¨

μ€‘μš”ν•œ 것은 .clone() μž…λ‹ˆλ‹€. 그것이 μ—†μœΌλ©΄ Moment.jsλ₯Ό μ‚¬μš©ν•  λ•Œ 일반적인 함정인 μ›λž˜ moment() λ₯Ό νŽΈμ§‘ν•˜κ²Œ λ©λ‹ˆλ‹€.

이 녀석듀을 μ‹œλ„ν•˜μ‹­μ‹œμ˜€

time = moment("01:46", "HH:mm");
round_interval = 30;//15;
intervals = Math.floor(time.minutes() / round_interval);
minutesToRound = time.minutes() % round_interval;
minutesRounded = minutesToRound>round_interval/2 ? round_interval: 0;
minutes = intervals * round_interval + minutesRounded;
time.minutes(minutes);

alert(time.format("HH:mm"))

νŒŒν‹°μ— λŠ¦μ—ˆμ§€λ§Œ...

@janwerkhoven 의 nearestMinutes ν•¨μˆ˜κ°€ μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŠ” 뢄에 따라 반올림 λ˜λŠ” λ‚΄λ¦Όν•œλ‹€λŠ” 것을 μ˜λ―Έν•˜λ―€λ‘œ κ°€μž₯ κ°€κΉŒμš΄ 15둜 λ°˜μ˜¬λ¦Όν•˜λ©΄ 12:34 -> 12:30 및 12:39 -> 12:45 μ˜ˆμƒλ©λ‹ˆλ‹€.

const roundedMinutes = Math.round(someMoment.clone().minute() / interval) * interval;

// 12:34 is fine...
// => Math.round(34 / 15) * 15
// => 2 * 15
30

// ... but 12:39 is not - it should be 45
// => Math.round(39 / 15) * 15
// => 2 * 15
30

@Silviusconcept 의 μ†”λ£¨μ…˜μ€ minutesRounded 이λ₯Ό κ·Ήλ³΅ν•©λ‹ˆλ‹€.

@kevlarr
Math.round(39/15) λŠ” 2κ°€ μ•„λ‹Œ 3을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
Math.round(39/15) * 15 λŠ” 30이 μ•„λ‹Œ 45λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

γ…‹γ…‹γ…‹γ…‹ ν•˜λ£¨κ°€ λλ‚ λ•Œ μž μ„ μ•ˆμžμ„œ μ“°λ ˆλ“œλ₯Ό λ„ˆλ¬΄ 많이 μ½μ–΄μ„œ 얻은건데.. Math.floor

λ‚˜λŠ” _zbarnett μ†”λ£¨μ…˜μ„ μ’‹μ•„ν•©λ‹ˆλ‹€
ν•¨μˆ˜μ— λŒ€ν•œ μ•½κ°„μ˜ μ—…λ°μ΄νŠΈ _ this.milliseconds(0); _

var newdate=turno.date.clone().roundNext15Min().add(μ˜ˆμƒ, 'λΆ„');

moment.fn.roundNext15Min = ν•¨μˆ˜() {
var 간격 = Math.floor(this.minutes() / 15);
if(this.minutes() % 15 != 0)
간격++;
if(간격 == 4) {
this.add('μ‹œκ°„', 1);
간격 = 0;
}
this.minutes(간격 * 15);
this.seconds(0);
_ this.milliseconds(0); _
이것을 λ°˜ν™˜ν•˜μ‹­μ‹œμ˜€;
}

λ‚΄ λ²„μ „μ˜ λ‹΅λ³€

const startOf = (m, n, unit) => {
  const units = [
    'year',
    'month',
    'hour',
    'minute',
    'second',
    'millisecond',
  ];
  const pos = units.indexOf(unit);
  if (pos === -1) {
    throw new Error('Unsupported unit');
  }
  for (let i = pos + 1; i < units.length; i++) {
    m.set(units[i], 0);
  }
  m.set(unit, Math.floor(m.get(unit) / n) * n);

  return m;
};

const endOf = (m, n, unit) => {
  const units = [
    'year',
    'month',
    'hour',
    'minute',
    'second',
    'millisecond',
  ];
  const pos = units.indexOf(unit);
  if (pos === -1) {
    throw new Error('Unsupported unit');
  }
  for (let i = pos + 1; i < units.length; i++) {
    m.set(units[i], units[i] === 'millisecond' ? 999 : 59);
  }
  m.set(unit, Math.floor(m.get(unit) / n) * n + n - 1);

  return m;
};

λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

startOf(moment(), 15, 'minute');
endOf(moment(), 15, 'minute')
// with moment-timezone
startOf(moment().tz("Europe/London"), 15, 'minute');

이 ν•¨μˆ˜λŠ” μ›λž˜ 개체λ₯Ό λ³€κ²½ν•˜κ³  ν•„μš”ν•  λ•Œ clone() λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
let next15Minutes = moment().add(15, 'minutes'); next15Minutes.minutes(Math.floor(next15Minutes.minutes() / 15) * 15); next15Minutes.format('HH:mm');

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰