UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

68 lines 7.88 kB
/** * @packageDocumentation * @module utils */ import { inject, Injectable } from '@angular/core'; import dayjs from 'dayjs'; import timezone from 'dayjs/plugin/timezone'; import utc from 'dayjs/plugin/utc'; import { TranslateService } from '../../translate/public-api'; import { DATE_TIME_FORMAT } from '../constants/public-api'; import * as i0 from "@angular/core"; dayjs.extend(timezone); dayjs.extend(utc); export class TimeService { constructor() { this.translate = inject(TranslateService); } get currTz() { return dayjs.tz.guess(); } now(utc) { const now = dayjs(); return utc ? now.utc() : now; } format(date, dateFormat = DATE_TIME_FORMAT) { return dayjs(date).format(dateFormat); } distance(date, baseDate) { const targetDate = this.normalizeToDate(date); const referenceDate = baseDate ? this.normalizeToDate(baseDate) : new Date(); // 使用 TranslateService 的 formatRelativeTime 方法 // 计算时间差,传入目标日期,相对于参考日期 const adjustedDate = new Date(targetDate.getTime() - (referenceDate.getTime() - Date.now())); return this.translate.formatRelativeTime(adjustedDate, { numeric: 'auto' }); } normalizeToDate(date) { if (date == null) { return new Date(); } if (date instanceof Date) { return date; } // 如果是 dayjs 对象,使用 toDate() 方法 if (typeof date === 'object' && 'toDate' in date && typeof date.toDate === 'function') { return date.toDate(); } // 如果是 dayjs 对象,使用 valueOf() 方法获取时间戳 if (typeof date === 'object' && 'valueOf' in date && typeof date.valueOf === 'function') { return new Date(date.valueOf()); } return new Date(date); } static { this.ɵfac = function TimeService_Factory(t) { return new (t || TimeService)(); }; } static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TimeService, factory: TimeService.ɵfac, providedIn: 'root' }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TimeService, [{ type: Injectable, args: [{ providedIn: 'root', }] }], null, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvcmUvc2VydmljZXMvdGltZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sS0FBcUIsTUFBTSxPQUFPLENBQUM7QUFDMUMsT0FBTyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFFbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRTNELEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUtsQixNQUFNLE9BQU8sV0FBVztJQUh4QjtRQUlVLGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQTJEOUM7SUF6REMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBYTtRQUNmLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQWlCLEVBQUUsVUFBVSxHQUFHLGdCQUFnQjtRQUNyRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFnQixFQUFFLFFBQXFCO1FBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsUUFBUTtZQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7WUFDaEMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFFZiw4Q0FBOEM7UUFDOUMsdUJBQXVCO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUMzQixVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQzlELENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUFnQjtRQUN0QyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksSUFBSSxZQUFZLElBQUksRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUNFLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFDeEIsUUFBUSxJQUFJLElBQUk7WUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFDakMsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsSUFDRSxPQUFPLElBQUksS0FBSyxRQUFRO1lBQ3hCLFNBQVMsSUFBSSxJQUFJO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQ2xDLENBQUM7WUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxPQUFPLElBQUksSUFBSSxDQUFDLElBQXVCLENBQUMsQ0FBQztJQUMzQyxDQUFDOzRFQTNEVSxXQUFXO3VFQUFYLFdBQVcsV0FBWCxXQUFXLG1CQUZWLE1BQU07O2lGQUVQLFdBQVc7Y0FIdkIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgdXRpbHNcbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBkYXlqcywgeyBDb25maWdUeXBlIH0gZnJvbSAnZGF5anMnO1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgREFURV9USU1FX0ZPUk1BVCB9IGZyb20gJy4uL2NvbnN0YW50cy9wdWJsaWMtYXBpJztcblxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcbmRheWpzLmV4dGVuZCh1dGMpO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVGltZVNlcnZpY2Uge1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBnZXQgY3VyclR6KCkge1xuICAgIHJldHVybiBkYXlqcy50ei5ndWVzcygpO1xuICB9XG5cbiAgbm93KHV0Yz86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBub3cgPSBkYXlqcygpO1xuICAgIHJldHVybiB1dGMgPyBub3cudXRjKCkgOiBub3c7XG4gIH1cblxuICBmb3JtYXQoZGF0ZT86IENvbmZpZ1R5cGUsIGRhdGVGb3JtYXQgPSBEQVRFX1RJTUVfRk9STUFUKSB7XG4gICAgcmV0dXJuIGRheWpzKGRhdGUpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgfVxuXG4gIGRpc3RhbmNlKGRhdGU6IENvbmZpZ1R5cGUsIGJhc2VEYXRlPzogQ29uZmlnVHlwZSk6IHN0cmluZyB7XG4gICAgY29uc3QgdGFyZ2V0RGF0ZSA9IHRoaXMubm9ybWFsaXplVG9EYXRlKGRhdGUpO1xuICAgIGNvbnN0IHJlZmVyZW5jZURhdGUgPSBiYXNlRGF0ZVxuICAgICAgPyB0aGlzLm5vcm1hbGl6ZVRvRGF0ZShiYXNlRGF0ZSlcbiAgICAgIDogbmV3IERhdGUoKTtcblxuICAgIC8vIOS9v+eUqCBUcmFuc2xhdGVTZXJ2aWNlIOeahCBmb3JtYXRSZWxhdGl2ZVRpbWUg5pa55rOVXG4gICAgLy8g6K6h566X5pe26Ze05beu77yM5Lyg5YWl55uu5qCH5pel5pyf77yM55u45a+55LqO5Y+C6ICD5pel5pyfXG4gICAgY29uc3QgYWRqdXN0ZWREYXRlID0gbmV3IERhdGUoXG4gICAgICB0YXJnZXREYXRlLmdldFRpbWUoKSAtIChyZWZlcmVuY2VEYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpLFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZm9ybWF0UmVsYXRpdmVUaW1lKGFkanVzdGVkRGF0ZSwgeyBudW1lcmljOiAnYXV0bycgfSk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVRvRGF0ZShkYXRlOiBDb25maWdUeXBlKTogRGF0ZSB7XG4gICAgaWYgKGRhdGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyDlpoLmnpzmmK8gZGF5anMg5a+56LGh77yM5L2/55SoIHRvRGF0ZSgpIOaWueazlVxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBkYXRlID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ3RvRGF0ZScgaW4gZGF0ZSAmJlxuICAgICAgdHlwZW9mIGRhdGUudG9EYXRlID09PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyDlpoLmnpzmmK8gZGF5anMg5a+56LGh77yM5L2/55SoIHZhbHVlT2YoKSDmlrnms5Xojrflj5bml7bpl7TmiLNcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgZGF0ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICd2YWx1ZU9mJyBpbiBkYXRlICYmXG4gICAgICB0eXBlb2YgZGF0ZS52YWx1ZU9mID09PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlIGFzIHN0cmluZyB8IG51bWJlcik7XG4gIH1cbn1cbiJdfQ==