Skip to content

Instantly share code, notes, and snippets.

@anyley
Last active July 11, 2018 05:19
Show Gist options
  • Save anyley/fe3c6a56fe958bb6569713227e1764ac to your computer and use it in GitHub Desktop.
Save anyley/fe3c6a56fe958bb6569713227e1764ac to your computer and use it in GitHub Desktop.
date time range calculator
export const writeEnums = (n, words, { zero = false, space = ' ' } = {}) => {
if (!zero && n === 0) return ''
const i10 = n % 10
const i100 = n % 100
if (i10 === 1 && i100 !== 11) {
return `${n}${space}${words[0]}`
} else if (i10 !== 0 && i100 !== 0 && i100 !== 11 && (i100 > 21 || i100 < 5) && i10 < 5) {
return `${n}${space}${words[1]}`
} else {
return `${n}${space}${words[2]}`
}
}
export const calcRange = (range, { separator = ' ', space = ' ', zero = false, short = false } = {}) => {
range = moment.range(range.start, range.end.add(1, 'd'))
const dur = moment.duration(range.duration())
const y = dur.years()
const m = dur.months()
const d = dur.days()
if (short) {
return [
writeEnums(y, ['г', 'г', 'л'], { zero, space }),
writeEnums(m, ['м', 'м', 'м'], { zero, space }),
writeEnums(d, ['д', 'д', 'д'], { zero, space }),
].filter(_ => _).join(separator)
} else {
return [
writeEnums(y, ['год', 'года', 'лет'], { zero, space }),
writeEnums(m, ['месяц', 'месяца', 'месяцев'], { zero, space }),
writeEnums(d, ['день', 'дня', 'дней'], { zero, space }),
].filter(_ => _).join(separator)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment