static ddToDms(lat: number, lng: number): string {
let latResult: string;
let lngResult: string;
let dmsResult: string;
latResult = (lat >= 0) ? 'N' : 'S';
lngResult = (lng >= 0) ? 'E' : 'W';
const latitude = this.getDms(lat).latLong + latResult;
const long = this.getDms(lng).latLong + lngResult;
// Joining both variables and separate them with a space.
dmsResult = `<span class="grey">Lat </span><span>${latitude}, </span><span class="grey">Long </span><span> ${long}</span>`;
// Return the resultant string
return dmsResult;
}
static ddToDmsRaw(lat: number, lng: number): string {
let latResult: string;
let lngResult: string;
let dmsResult: string;
latResult = (lat >= 0) ? 'N' : 'S';
lngResult = (lng >= 0) ? 'E' : 'W';
const latitude = this.getDms(lat).latLong + latResult;
const long = this.getDms(lng).latLong + lngResult;
dmsResult = `${latitude}, ${long}`;
return dmsResult;
}
static getTimeWithSuffix(valueInSeconds, duration): string {
const minuteSeconds = 60;
const hourMinutes = 60 * minuteSeconds;
const dayMinutes = (hourMinutes * 24);
const weekMinutes = (dayMinutes * 7);
const monthMinutes = (dayMinutes * 30);
const yearMinutes = (dayMinutes * 365);
const maxAllowedMinutes = (60 * 200000);
switch (true) {
case valueInSeconds < minuteSeconds:
duration = valueInSeconds + (valueInSeconds === 1 ? ' sec' : ' seconds');
break;
case valueInSeconds < hourMinutes: {
const min = Math.round(valueInSeconds / 60);
duration = min + (min === 1 ? ' min' : ' mins');
break;
}
case valueInSeconds < dayMinutes: {
const hr = Math.round(valueInSeconds / hourMinutes);
duration = hr + (hr === 1 ? ' hr' : ' hrs');
break;
}
case valueInSeconds < weekMinutes: {
const day = Math.round(valueInSeconds / dayMinutes);
duration = day + (day === 1 ? ' day' : ' days');
break;
}
case valueInSeconds < monthMinutes: {
const week = Math.round(valueInSeconds / weekMinutes);
duration = week + (week === 1 ? ' week' : ' weeks');
break;
}
case valueInSeconds < yearMinutes: {
const month = Math.round(valueInSeconds / monthMinutes);
duration = month + (month === 1 ? ' month' : ' months');
break;
}
case valueInSeconds < maxAllowedMinutes: {
const year = Math.round(valueInSeconds / yearMinutes);
duration = year + (year === 1 ? ' year' : ' years');
break;
}
case valueInSeconds > maxAllowedMinutes:
duration = 'N/A';
break;
default:
duration = 'few sec';
}
return duration;
}
static calculateTimeRemaining(dateIso: string): string {
let duration: string = 'No data';
let date = new Date(dateIso);
let timeInSeconds = date.getTime();
let valueInSeconds = (Date.now() - timeInSeconds);
valueInSeconds = Math.floor(Math.abs(valueInSeconds / 1000));
if (isNaN(valueInSeconds)) {
return duration;
}
if (valueInSeconds < 0) {
return '0';
}
duration = this.getTimeWithSuffix(valueInSeconds, duration);
return duration;
}
static calculateLastCompute(dateIso: number, agoSuffix: boolean = false, addLastUpdatedLabel: boolean = true): string {
let duration: string = 'No data';
let date = new Date(dateIso);
let timeInSeconds = date.getTime();
let valueInSeconds = (Date.now() - timeInSeconds);
valueInSeconds = Math.floor(Math.abs(valueInSeconds / 1000));
if (isNaN(valueInSeconds)) {
return duration;
}
if (valueInSeconds < 0) {
return '0';
}
duration = this.getTimeWithSuffix(valueInSeconds, duration);
if (valueInSeconds === 0) {
duration = 'Just now.';
}
if (agoSuffix === true && valueInSeconds !== 0 && duration !== 'N/A') {
duration = duration + ' ago';
}
if (!addLastUpdatedLabel) {
return `${duration}`;
}
return `${duration} ago`;
}
static getDms(latlang: number): { latLong: string, courseDegree: number, latLongSeconds: string } {
const dmsObject: { latLong: string, courseDegree: number, latLongSeconds: string } = {
latLong: '',
courseDegree: 0,
latLongSeconds: ''
};
let courseDegree: string | number;
let min: string | number;
let latLongValue: string;
let latLongSecondsValue: string;
let seconds: number;
latlang = Math.abs(latlang);
courseDegree = Math.floor(latlang);
latLongValue = courseDegree + '°';
min = Math.floor((latlang - courseDegree) * 60);
latLongValue += min + '\'';
latLongSecondsValue = latLongValue;
seconds = Math.round((latlang - courseDegree - min / 60) * 3600 * 1000) / 1000;
latLongSecondsValue += seconds + '"';
dmsObject.latLong = latLongValue;
dmsObject.courseDegree = courseDegree;
dmsObject.latLongSeconds = latLongSecondsValue;
return dmsObject;
}
public static generateMarkerCss(group: string, vessel: IVesselsByState): string {
const nameOfClass: string = group.trim().toLowerCase().split(' ').join('');
(vessel as any).class = 'border_' + nameOfClass;
return nameOfClass;
}
public static formatDateInFormat(date) {
let month = (date.getMonth() + 1).toString().padStart(2, '0');
let day = date.getDate().toString().padStart(2, '0');
let year = date.getFullYear().toString();
return `${day}-${month}-${year}`;
}
public static formatDate(date: Date | string): string {
if (!date || isNaN(new Date(date).getTime())) {
return 'Invalid Date';
}
return MapUtility.formatDateInFormat(new Date(date)) + ' ' + new Date(date).toLocaleTimeString(this.dateFormat).substring(0, 5);
}