|
|
@ -1,75 +1,84 @@
|
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
import { DatePipe } from '@angular/common';
|
|
|
|
import { DatePipe } from '@angular/common';
|
|
|
|
import { Observable , Observer } from 'rxjs';
|
|
|
|
import { Observable , Observer } from 'rxjs';
|
|
|
|
import { ITypeaheadItem } from '../models/typeahead.item';
|
|
|
|
import { ITypeaheadItem } from '../models/typeahead.item';
|
|
|
|
|
|
|
|
|
|
|
|
@Injectable({
|
|
|
|
@Injectable({
|
|
|
|
providedIn: 'root',
|
|
|
|
providedIn: 'root',
|
|
|
|
})
|
|
|
|
})
|
|
|
|
export class TimespanService {
|
|
|
|
export class TimespanService {
|
|
|
|
constructor(private datePipe: DatePipe) {
|
|
|
|
constructor(private datePipe: DatePipe) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
unitScales: number[] = [1, 1000, 1000 * 60, 1000 * 60 * 60, 1000 * 60 * 60 * 24, 1000 * 60 * 60 * 24 * 7, 1000 * 60 * 60 * 24 * 31, 1000 * 60 * 60 * 24 * 31 * 3, 1000 * 60 * 60 * 24 * 365.25];
|
|
|
|
unitScales: number[] = [1, 1000, 1000 * 60, 1000 * 60 * 60, 1000 * 60 * 60 * 24, 1000 * 60 * 60 * 24 * 7, 1000 * 60 * 60 * 24 * 31, 1000 * 60 * 60 * 24 * 31 * 3, 1000 * 60 * 60 * 24 * 365.25];
|
|
|
|
units: string[] = ['millisecond', 'second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'];
|
|
|
|
units: string[] = ['millisecond', 'second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'];
|
|
|
|
quarters: string[] = ['KW1', 'KW2', 'KW3', 'KW4'];
|
|
|
|
quarters: string[] = ['KW1', 'KW2', 'KW3', 'KW4'];
|
|
|
|
|
|
|
|
|
|
|
|
getStartEndCaption(date: Date, otherDate: Date, unitScale: number, suffix: boolean = false, extended: boolean = true): string {
|
|
|
|
getStartEndCaption(date: Date, otherDate: Date, unitScale: number, suffix: boolean = false, extended: boolean = true): string {
|
|
|
|
let showSuffix = false;
|
|
|
|
let showSuffix = false;
|
|
|
|
otherDate = new Date(otherDate.getTime() - 1); // fix year edge case
|
|
|
|
otherDate = new Date(otherDate.getTime() - 1); // fix year edge case
|
|
|
|
if (unitScale == 3) {
|
|
|
|
if (unitScale == 3) {
|
|
|
|
let format = "HH:00";
|
|
|
|
let format = "HH:00";
|
|
|
|
if (extended) {
|
|
|
|
if (extended) {
|
|
|
|
if (suffix || date.getFullYear() != otherDate.getFullYear())
|
|
|
|
if (suffix || date.getFullYear() != otherDate.getFullYear())
|
|
|
|
format = "d MMM yyyy:HH:00";
|
|
|
|
format = "d MMM yyyy:HH:00";
|
|
|
|
else if (date.getMonth() !== otherDate.getMonth())
|
|
|
|
else if (date.getMonth() !== otherDate.getMonth())
|
|
|
|
format = "d MMM HH:00";
|
|
|
|
format = "d MMM HH:00";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return this.datePipe.transform(date, format);
|
|
|
|
return this.datePipe.transform(date, format);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (unitScale == 4) {
|
|
|
|
if (unitScale == 4) {
|
|
|
|
let format = "d";
|
|
|
|
let format = "d";
|
|
|
|
if (extended) {
|
|
|
|
if (extended) {
|
|
|
|
if (suffix || date.getFullYear() != otherDate.getFullYear())
|
|
|
|
if (suffix || date.getFullYear() != otherDate.getFullYear())
|
|
|
|
format = "d MMM yyyy";
|
|
|
|
format = "d MMM yyyy";
|
|
|
|
else if (date.getMonth() !== otherDate.getMonth())
|
|
|
|
else if (date.getMonth() !== otherDate.getMonth())
|
|
|
|
format = "d MMM"
|
|
|
|
format = "d MMM"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return this.datePipe.transform(date, format);
|
|
|
|
return this.datePipe.transform(date, format);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (unitScale == 6) {
|
|
|
|
if (unitScale == 6) {
|
|
|
|
let format = "MMM";
|
|
|
|
let format = "MMM";
|
|
|
|
if (extended) {
|
|
|
|
if (extended) {
|
|
|
|
if (suffix || date.getFullYear() != otherDate.getFullYear())
|
|
|
|
if (suffix || date.getFullYear() != otherDate.getFullYear())
|
|
|
|
format = "MMM yyyy";
|
|
|
|
format = "MMM yyyy";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return this.datePipe.transform(date, format);
|
|
|
|
return this.datePipe.transform(date, format);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (unitScale == 7) {
|
|
|
|
if (unitScale == 7) {
|
|
|
|
let q = Math.trunc(date.getMonth() / 3);
|
|
|
|
let q = Math.trunc(date.getMonth() / 3);
|
|
|
|
return this.quarters[q];
|
|
|
|
return this.quarters[q];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (unitScale == 8) {
|
|
|
|
if (unitScale == 8) {
|
|
|
|
return this.datePipe.transform(date, "yyyy");
|
|
|
|
return this.datePipe.transform(date, "yyyy");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return "";
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
getStartCaption(startDate: Date, endDate: Date, unitScale: number, suffix: boolean = false, extended: boolean = true): string {
|
|
|
|
getStartCaption(startDate: Date, endDate: Date, unitScale: number, suffix: boolean = false, extended: boolean = true): string {
|
|
|
|
return this.getStartEndCaption(new Date(startDate.getTime() + (this.unitScales[unitScale] / 2)), endDate, unitScale, suffix, extended);
|
|
|
|
return this.getStartEndCaption(new Date(startDate.getTime() + (this.unitScales[unitScale] / 2)), endDate, unitScale, suffix, extended);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
getEndCaption(startDate: Date,endDate: Date, unitScale: number, suffix: boolean = true): string {
|
|
|
|
getEndCaption(startDate: Date,endDate: Date, unitScale: number, suffix: boolean = true): string {
|
|
|
|
return this.getStartEndCaption(new Date(endDate.getTime() - (this.unitScales[unitScale] / 2)), startDate, unitScale, suffix);
|
|
|
|
return this.getStartEndCaption(new Date(endDate.getTime() - (this.unitScales[unitScale] / 2)), startDate, unitScale, suffix);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
getCaption(startDate: Date, endDate: Date, unitScale: number): string {
|
|
|
|
getCaption(startDate: Date, endDate: Date, unitScale?: number): string {
|
|
|
|
let startCaption = this.getStartCaption(startDate, endDate, unitScale);
|
|
|
|
let scale = unitScale;
|
|
|
|
let endCaption = this.getEndCaption(startDate,endDate, unitScale);
|
|
|
|
if(unitScale==null) {
|
|
|
|
if ((endDate.getTime() - startDate.getTime()) < (1.5 * this.unitScales[unitScale]))
|
|
|
|
scale=4;
|
|
|
|
return endCaption;
|
|
|
|
if(startDate.getUTCMonth() == 0 && startDate.getUTCDate() == 1 && startDate.getUTCHours() == 0 && startDate.getUTCMinutes() ==0 && startDate.getUTCSeconds() ==0 &&
|
|
|
|
return `${startCaption}-${endCaption}`;
|
|
|
|
endDate.getUTCMonth() == 0 && endDate.getUTCDate() == 1 && endDate.getUTCHours() == 0 && endDate.getUTCMinutes() ==0 && endDate.getUTCSeconds() ==0) {
|
|
|
|
}
|
|
|
|
scale=8;
|
|
|
|
|
|
|
|
} else if (startDate.getUTCHours() > 0 && startDate.getUTCMinutes() >0) {
|
|
|
|
}
|
|
|
|
scale =3
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let startCaption = this.getStartCaption(startDate, endDate, scale);
|
|
|
|
|
|
|
|
let endCaption = this.getEndCaption(startDate,endDate, scale);
|
|
|
|
|
|
|
|
if ((endDate.getTime() - startDate.getTime()) < (1.5 * this.unitScales[scale]))
|
|
|
|
|
|
|
|
return endCaption;
|
|
|
|
|
|
|
|
return `${startCaption}-${endCaption}`;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|