@alauda-fe/common
Version:
Alauda frontend team common codes.
68 lines • 7.88 kB
JavaScript
/**
* @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==