feat:补充DATETOSTR能力&新增日期范围解析函数

This commit is contained in:
lvxiaojiao 2023-02-27 10:14:23 +08:00
parent 3270eaa51c
commit 565170dd7b
4 changed files with 52 additions and 8 deletions

View File

@ -209,12 +209,39 @@ test('formula:date', () => {
expect(evalFormual('DATETOSTR("12/25/2022", "YYYY-MM-DD")')).toBe(
moment('12/25/2022').format('YYYY-MM-DD')
);
expect(evalFormual('DATETOSTR("12-25-2022", "YYYY/MM/DD")')).toBe(
moment('12-25-2022').format('YYYY/MM/DD')
);
expect(evalFormual('DATETOSTR("2022年12月25日", "YYYY/MM/DD")')).toBe(
moment('2022年12月25日', 'YYYY-MM-DD').format('YYYY/MM/DD')
);
expect(
evalFormual(
'DATETOSTR("2022年12月25日 14时23分56秒", "YYYY/MM/DD HH:mm:ss")'
)
).toBe(
moment('2022年12月25日 14时23分56秒', 'YYYY-MM-DD HH:mm:ss').format(
'YYYY/MM/DD HH:mm:ss'
)
);
expect(evalFormual('DATETOSTR("20230105", "YYYY/MM/DD")')).toBe(
moment('20230105', 'YYYY-MM-DD').format('YYYY/MM/DD')
);
expect(evalFormual('DATETOSTR("2023.01.05", "YYYY/MM/DD")')).toBe(
moment('2023.01.05', 'YYYY-MM-DD').format('YYYY/MM/DD')
);
expect(
evalFormual('DATETOSTR("2010-10-20 4:30 +0000", "YYYY-MM-DD HH:mm Z")')
).toBe(moment('2010-10-20 4:30 +0000').format('YYYY-MM-DD HH:mm Z'));
expect(
evalFormual('DATETOSTR("2013-02-04T10:35:24-08:00", "YYYY-MM-DD HH:mm:ss")')
).toBe(moment('2013-02-04T10:35:24-08:00').format('YYYY-MM-DD HH:mm:ss'));
expect(evalFormual('YEAR(STRTODATE("2021-10-24 10:10:10"))')).toBe(2021);
expect(
evalFormual(
'DATERANGESPLIT("1676563200,1676735999", undefined, "YYYY.MM.DD hh:mm:ss")'
)
).toBe('2023.02.17 12:00:00,2023.02.18 11:59:59');
).toEqual(['2023.02.17 12:00:00', '2023.02.18 11:59:59']);
expect(evalFormual('DATERANGESPLIT("1676563200,1676735999", 0)')).toBe(
'1676563200'
);

View File

@ -637,6 +637,7 @@ DATETOSTR(DATE('2021-12-21'), 'YYYY.MM.DD hh:mm:ss') 得到 '2021.12.21 08:00:00
* `date:string` 日期范围字符串
* `key:string` 取值标识0或'start'表示获取开始时间1或'end'表示获取结束时间
* `format:string` 日期格式,可选
* `delimiter:string` 分隔符,可选,默认为','
返回:`string` 日期字符串
@ -644,7 +645,8 @@ DATETOSTR(DATE('2021-12-21'), 'YYYY.MM.DD hh:mm:ss') 得到 '2021.12.21 08:00:00
示例:
DATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00,2023.02.18 11:59:59'
DATERANGESPLIT('1676563200, 1676735999') 得到 [1676563200, 1676735999]
DATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') 得到 [2023.02.17 12:00:00, 2023.02.18 11:59:59]
DATERANGESPLIT('1676563200, 1676735999', 0 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
DATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
DATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'

View File

@ -1053,7 +1053,7 @@ export const doc: {
},
{
name: "DATERANGESPLIT",
description: "获取日期范围字符串中的开始时间、结束时间\n\n示例\n\nDATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00,2023.02.18 11:59:59'\nDATERANGESPLIT('1676563200, 1676735999', 0 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'\nDATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'\nDATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'\nDATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'",
description: "获取日期范围字符串中的开始时间、结束时间\n\n示例\n\nDATERANGESPLIT('1676563200, 1676735999') 得到 [1676563200, 1676735999]\nDATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') 得到 [2023.02.17 12:00:00, 2023.02.18 11:59:59]\nDATERANGESPLIT('1676563200, 1676735999', 0 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'\nDATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'\nDATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'\nDATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'",
example: "DATERANGESPLIT(date, 'YYYY-MM-DD')",
params: [
{
@ -1070,6 +1070,11 @@ export const doc: {
type: "string",
name: "format",
description: "日期格式,可选"
},
{
type: "string",
name: "delimiter",
description: "分隔符,可选,默认为','"
}
],
returns: {

View File

@ -1527,7 +1527,8 @@ export class Evaluator {
*
*
*
* DATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') '2023.02.17 12:00:00,2023.02.18 11:59:59'
* DATERANGESPLIT('1676563200, 1676735999') [1676563200, 1676735999]
* DATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') [2023.02.17 12:00:00, 2023.02.18 11:59:59]
* DATERANGESPLIT('1676563200, 1676735999', 0 , 'YYYY.MM.DD hh:mm:ss') '2023.02.17 12:00:00'
* DATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') '2023.02.17 12:00:00'
* DATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') '2023.02.18 11:59:59'
@ -1538,15 +1539,21 @@ export class Evaluator {
* @param {string} date
* @param {string} key 0'start'1'end'
* @param {string} format
* @param {string} delimiter ','
*
* @returns {string}
*/
fnDATERANGESPLIT(daterange: string, key?: string, format?: string) {
fnDATERANGESPLIT(
daterange: string,
key?: string,
format?: string,
delimiter = ','
) {
if (!daterange) {
return '';
}
const dateArr = daterange.split(',');
const dateArr = daterange.split(delimiter);
let start: any = dateArr[0].trim();
let end: any = dateArr[1].trim();
@ -1554,10 +1561,13 @@ export class Evaluator {
if (format && start && end) {
start = this.normalizeDate(start);
end = this.normalizeDate(end);
return `${moment(start).format(format)},${moment(end).format(format)}`;
return [
`${moment(start).format(format)}`,
`${moment(end).format(format)}`
];
}
return daterange;
return dateArr;
}
if ([0, '0', 'start'].includes(key) && start) {