valor-software/ng2-bootstrap

View on GitHub
src/chronos/units/day-of-year.ts

Summary

Maintainability
A
40 mins
Test Coverage
import { addFormatToken } from '../format/format';
import { startOf } from '../utils/start-end-of';
import { addRegexToken, match1to3, match3 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { addUnitPriority } from './priorities';
import { addUnitAlias } from './aliases';
import { DateArray, DateFormatterOptions } from '../types';
import { DateParsingConfig } from '../create/parsing.types';
import { toInt } from '../utils/type-checks';
import { add } from '../moment/add-subtract';

// FORMATTING

addFormatToken('DDD', ['DDDD', 3, false], 'DDDo',
  function (date: Date): string {
    return getDayOfYear(date).toString(10);
  });


// ALIASES

addUnitAlias('dayOfYear', 'DDD');

// PRIORITY

addUnitPriority('dayOfYear', 4);

addRegexToken('DDD', match1to3);
addRegexToken('DDDD', match3);
addParseToken(['DDD', 'DDDD'],
  function (input: string, array: DateArray, config: DateParsingConfig): DateParsingConfig {
    config._dayOfYear = toInt(input);

    return config;
  });

export function getDayOfYear(date: Date): number {
  const date1 = +startOf(date, 'day');
  const date2 = +startOf(date, 'year');
  const someDate = date1 - date2;
  const oneDay = 1000 * 60 * 60 * 24;

  return Math.round(someDate / oneDay) + 1;
}

export function setDayOfYear(date: Date, input: number): Date {
  const dayOfYear = getDayOfYear(date);

  return add(date, (input - dayOfYear), 'day');
}