mirror of
https://gitee.com/baidu/amis.git
synced 2024-12-02 03:58:07 +08:00
feat:补充DATETOSTR能力&新增日期范围解析函数
This commit is contained in:
parent
3270eaa51c
commit
565170dd7b
@ -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'
|
||||
);
|
||||
|
@ -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'
|
||||
|
@ -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: {
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user