refactor(moment): Replace Moment.js with DayJs (#31310)

This commit is contained in:
Mehmet Salih Yavuz
2024-12-23 20:42:43 +03:00
committed by GitHub
parent b382ef1058
commit a193d790b2
41 changed files with 268 additions and 212 deletions

View File

@@ -1,42 +0,0 @@
/**
* 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 moment from 'moment';
export const fDuration = function (t1, t2, format = 'HH:mm:ss.SS') {
const diffSec = t2 - t1;
const duration = moment(new Date(diffSec));
return duration.utc().format(format);
};
export const now = function () {
// seconds from EPOCH as a float
return moment().utc().valueOf();
};
export const epochTimeXHoursAgo = function (h) {
return moment().subtract(h, 'hours').utc().valueOf();
};
export const epochTimeXDaysAgo = function (d) {
return moment().subtract(d, 'days').utc().valueOf();
};
export const epochTimeXYearsAgo = function (y) {
return moment().subtract(y, 'years').utc().valueOf();
};

View File

@@ -22,20 +22,41 @@ import {
epochTimeXHoursAgo,
epochTimeXDaysAgo,
epochTimeXYearsAgo,
extendedDayjs,
} from 'src/utils/dates';
describe('extendedDayjs', () => {
it('returns dayjs object with extended methods', () => {
const dayjs = extendedDayjs();
expect(dayjs).toHaveProperty('utc');
expect(dayjs).toHaveProperty('calendar');
expect(dayjs).toHaveProperty('tz');
expect(dayjs).toHaveProperty('fromNow');
expect(
extendedDayjs(
'05/02/69 1:02:03 PM -05:00',
'MM/DD/YY H:mm:ss A Z',
).toISOString(),
).toEqual('1969-05-02T18:02:03.000Z');
expect(extendedDayjs).toHaveProperty('duration');
expect(extendedDayjs).toHaveProperty('updateLocale');
});
});
describe('fDuration', () => {
it('is a function', () => {
expect(typeof fDuration).toBe('function');
});
it('returns a string', () => {
expect(typeof fDuration(new Date(), new Date())).toBe('string');
expect(typeof fDuration(new Date().getTime(), new Date().getTime())).toBe(
'string',
);
});
it('returns the expected output', () => {
const output = fDuration('1496293608897', '1496293623406');
expect(output).toBe('00:00:14.50');
const output = fDuration(1496293608897, 1496293623406);
expect(output).toBe('00:00:14.509');
});
});

View File

@@ -0,0 +1,69 @@
/**
* 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';
dayjs.extend(utc);
dayjs.extend(timezone);
dayjs.extend(calendar);
dayjs.extend(relativeTime);
dayjs.extend(customParseFormat);
dayjs.extend(duration);
dayjs.extend(updateLocale);
export const extendedDayjs = 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;
};