File

src/app/GN2CommonModule/form/date/ngb-date-custom-parser-formatter.ts

Description

Format un objet NgbDateStruc au format FR dd/mm/aaaa
return string

ex usage : intégrer {provide: NgbDateParserFormatter, useClass: NgbDateFRParserFormatter} dans providers: [] d'un Component

Methods

parse
parse(value: string)
Returns: DateStruc
format
format(date: DateStruc)
Returns: string
import { Injectable } from '@angular/core';
import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';
import { DateStruc } from './date.component';

function padNumber(value: number) {
  if (isNumber(value)) {
    return `0${value}`.slice(-2);
  } else {
    return '';
  }
}

function isNumber(value: any): boolean {
  return !isNaN(toInteger(value));
}

function toInteger(value: any): number {
  return parseInt(`${value}`, 10);
}

/**
 *  Format un objet NgbDateStruc au format FR dd/mm/aaaa
 *  return string
 *
 *  ex usage : intégrer {provide: NgbDateParserFormatter, useClass: NgbDateFRParserFormatter} dans providers: [] d'un Component
 **/
@Injectable()
export class NgbDateFRParserFormatter extends NgbDateParserFormatter {
  parse(value: string): DateStruc {
    if (value) {
      const dateParts = value.trim().split('/');
      if (dateParts.length === 1 && isNumber(dateParts[0])) {
        return { year: toInteger(dateParts[0]), month: null, day: null };
      } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {
        return { year: toInteger(dateParts[1]), month: toInteger(dateParts[0]), day: null };
      } else if (
        dateParts.length === 3 &&
        isNumber(dateParts[0]) &&
        isNumber(dateParts[1]) &&
        isNumber(dateParts[2])
      ) {
        return {
          year: toInteger(dateParts[2]),
          month: toInteger(dateParts[1]),
          day: toInteger(dateParts[0]),
        };
      }
    }
    return null;
  }

  format(date: DateStruc): string {
    let stringDate: string = '';
    if (date) {
      stringDate += isNumber(date.day) ? padNumber(date.day) + '/' : '';
      stringDate += isNumber(date.month) ? padNumber(date.month) + '/' : '';
      stringDate += date.year;
    }

    return stringDate;
  }
}

@Injectable()
export class NgbDatePeriodParserFormatter extends NgbDateParserFormatter {
  parse(value: string): DateStruc {
    if (value) {
      const dateParts = value.trim().split('/');
      if (dateParts.length === 1 && isNumber(dateParts[0])) {
        return { year: null, month: null, day: null };
      } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {
        return { year: null, month: toInteger(dateParts[0]), day: null };
      } else if (
        dateParts.length === 3 &&
        isNumber(dateParts[0]) &&
        isNumber(dateParts[1]) &&
        isNumber(dateParts[2])
      ) {
        return {
          year: null,
          month: toInteger(dateParts[1]),
          day: toInteger(dateParts[0]),
        };
      }
    }
    return null;
  }
  format(date: DateStruc): string {
    let stringDate: string = '';
    if (date) {
      stringDate += isNumber(date.day) ? padNumber(date.day) + '/' : '';
      stringDate += isNumber(date.month) ? padNumber(date.month) : '';
    }

    return stringDate;
  }
}

results matching ""

    No results matching ""