mirror of
https://github.com/apache/superset.git
synced 2026-05-12 19:35:17 +00:00
refactor(moment): Replace Moment.js with DayJs (#31310)
This commit is contained in:
committed by
GitHub
parent
b382ef1058
commit
a193d790b2
@@ -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();
|
||||
};
|
||||
@@ -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');
|
||||
});
|
||||
});
|
||||
|
||||
69
superset-frontend/src/utils/dates.ts
Normal file
69
superset-frontend/src/utils/dates.ts
Normal 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;
|
||||
};
|
||||
Reference in New Issue
Block a user