blob: 9594f15c98857e289236a424e790d320aa60b148 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import dayjs, { Dayjs } from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';
import calendar from 'dayjs/plugin/calendar';
import relativeTime from 'dayjs/plugin/relativeTime';
import customParseFormat from 'dayjs/plugin/customParseFormat';
import duration from 'dayjs/plugin/duration';
import updateLocale from 'dayjs/plugin/updateLocale';
import localizedFormat from 'dayjs/plugin/localizedFormat';
dayjs.extend(utc);
dayjs.extend(timezone);
dayjs.extend(calendar);
dayjs.extend(relativeTime);
dayjs.extend(customParseFormat);
dayjs.extend(duration);
dayjs.extend(updateLocale);
dayjs.extend(localizedFormat);
dayjs.updateLocale('en', {
invalidDate: 'Invalid date',
});
export const extendedDayjs = dayjs;
export type { Dayjs };
export const fDuration = function (
t1: number,
t2: number,
format = 'HH:mm:ss.SSS',
): string {
const diffSec = t2 - t1;
const duration = dayjs(new Date(diffSec));
return duration.utc().format(format);
};
export const now = function (): number {
// seconds from EPOCH as a float
return dayjs().utc().valueOf();
};
export const epochTimeXHoursAgo = function (h: number): number {
return dayjs().subtract(h, 'hours').utc().valueOf();
};
export const epochTimeXDaysAgo = function (d: number): number {
return dayjs().subtract(d, 'days').utc().valueOf();
};
export const epochTimeXYearsAgo = function (y: number): number {
return dayjs().subtract(y, 'years').utc().valueOf();
};
export const isDST = function (date: Dayjs, timezoneName: string): boolean {
const standardOffset = dayjs.tz('2021-01-01', timezoneName).utcOffset();
const currentOffset = date.tz(timezoneName).utcOffset();
return currentOffset !== standardOffset;
};