@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
81 lines • 10.1 kB
JavaScript
import { Injectable } from '@angular/core';
import { AppStateService } from './ui-state.service';
import * as i0 from "@angular/core";
import * as i1 from "./ui-state.service";
export class DateFormatService {
constructor(appStateService) {
this.appStateService = appStateService;
}
/**
* Returns date format pattern based on locale and formatting syntax.
*
* @param formattingOptions - Object containing formatting options
* @returns A string containing the date format pattern for the specified locale
*/
getDateFormat(formattingOptions) {
let locale = formattingOptions?.locale || this.appStateService.state.lang;
const useUppercaseFormat = formattingOptions?.useUppercaseFormat !== undefined
? formattingOptions.useUppercaseFormat
: true;
// Intl.DateTimeFormat requires locale to be in the format e.g. 'en-US' instead of 'en_US'
locale = locale.replace(/_/g, '-');
if (!this.isValidLocale(locale)) {
locale = 'en-US';
}
const formatter = new Intl.DateTimeFormat(locale, {
year: 'numeric',
month: 'numeric',
day: 'numeric'
});
const patterns = {
day: useUppercaseFormat ? 'DD' : 'dd',
month: 'MM',
year: useUppercaseFormat ? 'YYYY' : 'yyyy'
};
return formatter
.formatToParts(new Date(2020, 0, 1))
.map(part => (part.type === 'literal' ? part.value : patterns[part.type] || ''))
.join('');
}
/**
* Determines whether a given locale should use 12-hour clock format with AM/PM.
*
* @param locale - The locale code (e.g., 'en', 'pl', 'en_US')
* @returns boolean indicating whether meridian format (AM/PM) should be used
*/
shouldUseMeridianFormat(locale = this.appStateService.state.lang) {
if (!this.isNonEmptyString(locale)) {
return false;
}
try {
const formatter = new Intl.DateTimeFormat(locale.replace(/_/g, '-'), { hour: 'numeric' });
return formatter
.formatToParts(new Date(2020, 0, 1, 13, 0, 0))
.some(part => part.type === 'dayPeriod');
}
catch (error) {
return false;
}
}
isNonEmptyString(locale) {
return typeof locale === 'string' && locale.trim().length > 0;
}
isValidLocale(locale) {
try {
const supportedLocales = Intl.DateTimeFormat.supportedLocalesOf([locale]);
return supportedLocales.length > 0;
}
catch (e) {
return false;
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateFormatService, deps: [{ token: i1.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateFormatService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateFormatService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.AppStateService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1mb3JtYXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2RhdGUtZm9ybWF0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQVVyRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQW9CLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUFHLENBQUM7SUFFeEQ7Ozs7O09BS0c7SUFDSCxhQUFhLENBQUMsaUJBQXFDO1FBQ2pELElBQUksTUFBTSxHQUFHLGlCQUFpQixFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDMUUsTUFBTSxrQkFBa0IsR0FDdEIsaUJBQWlCLEVBQUUsa0JBQWtCLEtBQUssU0FBUztZQUNqRCxDQUFDLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFWCwwRkFBMEY7UUFDMUYsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUNoRCxJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxTQUFTO1lBQ2hCLEdBQUcsRUFBRSxTQUFTO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUc7WUFDZixHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNyQyxLQUFLLEVBQUUsSUFBSTtZQUNYLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNO1NBQzNDLENBQUM7UUFFRixPQUFPLFNBQVM7YUFDYixhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQy9FLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUF1QixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUMxRixPQUFPLFNBQVM7aUJBQ2IsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBYztRQUNyQyxPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQWM7UUFDbEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUUxRSxPQUFPLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDOytHQTFFVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi91aS1zdGF0ZS5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIERhdGVGb3JtYXRPcHRpb25zIHtcbiAgbG9jYWxlPzogc3RyaW5nO1xuICB1c2VVcHBlcmNhc2VGb3JtYXQ/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYXRlRm9ybWF0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZGF0ZSBmb3JtYXQgcGF0dGVybiBiYXNlZCBvbiBsb2NhbGUgYW5kIGZvcm1hdHRpbmcgc3ludGF4LlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybWF0dGluZ09wdGlvbnMgLSBPYmplY3QgY29udGFpbmluZyBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgICogQHJldHVybnMgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGF0ZSBmb3JtYXQgcGF0dGVybiBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGVcbiAgICovXG4gIGdldERhdGVGb3JtYXQoZm9ybWF0dGluZ09wdGlvbnM/OiBEYXRlRm9ybWF0T3B0aW9ucyk6IHN0cmluZyB7XG4gICAgbGV0IGxvY2FsZSA9IGZvcm1hdHRpbmdPcHRpb25zPy5sb2NhbGUgfHwgdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUubGFuZztcbiAgICBjb25zdCB1c2VVcHBlcmNhc2VGb3JtYXQgPVxuICAgICAgZm9ybWF0dGluZ09wdGlvbnM/LnVzZVVwcGVyY2FzZUZvcm1hdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm9ybWF0dGluZ09wdGlvbnMudXNlVXBwZXJjYXNlRm9ybWF0XG4gICAgICAgIDogdHJ1ZTtcblxuICAgIC8vIEludGwuRGF0ZVRpbWVGb3JtYXQgcmVxdWlyZXMgbG9jYWxlIHRvIGJlIGluIHRoZSBmb3JtYXQgZS5nLiAnZW4tVVMnIGluc3RlYWQgb2YgJ2VuX1VTJ1xuICAgIGxvY2FsZSA9IGxvY2FsZS5yZXBsYWNlKC9fL2csICctJyk7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZExvY2FsZShsb2NhbGUpKSB7XG4gICAgICBsb2NhbGUgPSAnZW4tVVMnO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwge1xuICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgbW9udGg6ICdudW1lcmljJyxcbiAgICAgIGRheTogJ251bWVyaWMnXG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXR0ZXJucyA9IHtcbiAgICAgIGRheTogdXNlVXBwZXJjYXNlRm9ybWF0ID8gJ0REJyA6ICdkZCcsXG4gICAgICBtb250aDogJ01NJyxcbiAgICAgIHllYXI6IHVzZVVwcGVyY2FzZUZvcm1hdCA/ICdZWVlZJyA6ICd5eXl5J1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0dGVyXG4gICAgICAuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLCAwLCAxKSlcbiAgICAgIC5tYXAocGFydCA9PiAocGFydC50eXBlID09PSAnbGl0ZXJhbCcgPyBwYXJ0LnZhbHVlIDogcGF0dGVybnNbcGFydC50eXBlXSB8fCAnJykpXG4gICAgICAuam9pbignJyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gbG9jYWxlIHNob3VsZCB1c2UgMTItaG91ciBjbG9jayBmb3JtYXQgd2l0aCBBTS9QTS5cbiAgICpcbiAgICogQHBhcmFtIGxvY2FsZSAtIFRoZSBsb2NhbGUgY29kZSAoZS5nLiwgJ2VuJywgJ3BsJywgJ2VuX1VTJylcbiAgICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgbWVyaWRpYW4gZm9ybWF0IChBTS9QTSkgc2hvdWxkIGJlIHVzZWRcbiAgICovXG4gIHNob3VsZFVzZU1lcmlkaWFuRm9ybWF0KGxvY2FsZSA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLnN0YXRlLmxhbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNOb25FbXB0eVN0cmluZyhsb2NhbGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZS5yZXBsYWNlKC9fL2csICctJyksIHsgaG91cjogJ251bWVyaWMnIH0pO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlclxuICAgICAgICAuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLCAwLCAxLCAxMywgMCwgMCkpXG4gICAgICAgIC5zb21lKHBhcnQgPT4gcGFydC50eXBlID09PSAnZGF5UGVyaW9kJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTm9uRW1wdHlTdHJpbmcobG9jYWxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIGxvY2FsZSA9PT0gJ3N0cmluZycgJiYgbG9jYWxlLnRyaW0oKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkTG9jYWxlKGxvY2FsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1cHBvcnRlZExvY2FsZXMgPSBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbbG9jYWxlXSk7XG5cbiAgICAgIHJldHVybiBzdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aCA+IDA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIl19