import { Pipe, PipeTransform } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; // Components // import * as _ from 'underscore'; import * as moment from 'moment'; /** * @param input Input: string. The time string that should be converted * @param showFullDate Input: boolean. If true, display date in YYYY-MM-DD format * @param showTime Input: boolean. If true, adds time to the return date */ @Pipe({name: 'niceDate'}) export class NiceDatePipe implements PipeTransform { constructor ( private readonly translate: TranslateService ) {} transform(input: string, showFullDate: boolean, showTime: boolean, onlyDate: boolean = false): string { if (input === null || input === undefined || (!_.isString(input) && !_.isNumber(input))) { return input; } let inputMom: any; let isNoTime: boolean; if (_.isNumber(input)) { inputMom = moment(input); isNoTime = false; } else { const dateNoTimeMom: Moment = moment(!onlyDate ? input : input + 'T00:00:00.00', 'YYYY-MM-DD[T]00:00:00.00', true); const millisecondIndex: number = input.indexOf('.'); input = millisecondIndex !== -1 // Strippa ev. bort millisekunder ? input.substring(0, millisecondIndex) : input; const dateTimeMom: Moment = moment(input, 'YYYY-MM-DD[T]HH:mm:ss', true); if (!dateNoTimeMom.isValid() && !dateTimeMom.isValid()) { const timeMom: Moment = moment(input, 'HH:mm:ss', true); const noTimeMom: boolean = input === '00:00:00.00'; return timeMom.isValid() ? timeMom.format('HH:mm') : noTimeMom ? '' : input; } isNoTime = dateNoTimeMom.isValid(); inputMom = isNoTime ? dateNoTimeMom : dateTimeMom; } let locale: string = this.translate.currentLang || 'sv_SE'; locale = locale.substring(0, locale.indexOf('_')); const now: Moment = moment().startOf('day'); const diffDays: number = moment(inputMom).startOf('day').diff(now, 'days', true); let niceDate: string = ''; if (showFullDate) { niceDate = inputMom.lang(locale).format('YYYY-MM-DD'); } else { if (diffDays < -1 || diffDays > 1) { // Mer än en dags skillnad const isSameYear: boolean = now.year() === inputMom.year(); niceDate = isSameYear ? inputMom.lang(locale).format('D/M') : inputMom.lang(locale).format('YYYY-MM-DD'); } else { niceDate = diffDays === 0 ? this.translate.instant('DATE.IDAG') : diffDays < 0 ? this.translate.instant('DATE.IGAAR') : this.translate.instant('DATE.IMORGON'); } } if (!isNoTime && showTime) { niceDate += inputMom.format('[ ]HH:mm'); } return niceDate; } }