diff --git a/packages/amis-formula/__tests__/fomula.test.ts b/packages/amis-formula/__tests__/fomula.test.ts index db84ee8d3..7515a7120 100644 --- a/packages/amis-formula/__tests__/fomula.test.ts +++ b/packages/amis-formula/__tests__/fomula.test.ts @@ -265,6 +265,9 @@ test('formula:date', () => { 'DATERANGESPLIT("1676563200,1676735999", "end" , "YYYY.MM.DD hh:mm:ss")' ) ).toBe('2023.02.18 11:59:59'); + expect(evalFormual('DATETOWEEK("2023-02-27")')).toBe( + moment('2023-02-27').day() + ); }); test('formula:last', () => { diff --git a/packages/amis-formula/src/doc.md b/packages/amis-formula/src/doc.md index 85c65f0bc..86588f1b6 100644 --- a/packages/amis-formula/src/doc.md +++ b/packages/amis-formula/src/doc.md @@ -652,6 +652,20 @@ DATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') 得到 DATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59' DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59' +### DATETOWEEK + +用法:`DATETOWEEK(date)` + + * `date:any` 日期 + +返回:`number` 星期几的数字标识 + +获取日期的星期几,从0到6分别表示星期日、一、二...六 + +示例: + +DATETOWEEK('2023-02-27') 得到 1 + ### STARTOF 用法:`STARTOF(date[unit = "day"])` diff --git a/packages/amis-formula/src/doc.ts b/packages/amis-formula/src/doc.ts index 18c5d2734..925dbe182 100644 --- a/packages/amis-formula/src/doc.ts +++ b/packages/amis-formula/src/doc.ts @@ -1083,6 +1083,23 @@ export const doc: { }, namespace: "日期函数" }, + { + name: "DATETOWEEK", + description: "获取日期的星期几,从0到6分别表示星期日、一、二...六\n\n示例:\n\nDATETOWEEK('2023-02-27') 得到 1", + example: "DATETOWEEK(date)", + params: [ + { + type: "any", + name: "date", + description: "日期" + } + ], + returns: { + type: "number", + description: "星期几的数字标识" + }, + namespace: "日期函数" + }, { name: "STARTOF", description: "返回日期的指定范围的开端", diff --git a/packages/amis-formula/src/evalutor.ts b/packages/amis-formula/src/evalutor.ts index 577c6a39c..6d649252a 100644 --- a/packages/amis-formula/src/evalutor.ts +++ b/packages/amis-formula/src/evalutor.ts @@ -1470,7 +1470,10 @@ export class Evaluator { * @returns {number} 时间戳 */ fnTIMESTAMP(date: Date, format?: 'x' | 'X') { - return parseInt(moment(date).format(format === 'x' ? 'x' : 'X'), 10); + return parseInt( + moment(this.normalizeDate(date)).format(format === 'x' ? 'x' : 'X'), + 10 + ); } /** @@ -1572,6 +1575,23 @@ export class Evaluator { return dateArr; } + /** + * 获取日期的星期几,从0到6分别表示星期日、一、二...六 + * + * 示例: + * + * DATETOWEEK('2023-02-27') 得到 1 + * + * @example DATETOWEEK(date) + * @namespace 日期函数 + * @param {any} date 日期 + * + * @returns {number} 星期几的数字标识 + */ + fnDATETOWEEK(date: Date | string | number) { + return moment(this.normalizeDate(date)).day(); + } + /** * 返回日期的指定范围的开端 * @@ -1582,7 +1602,7 @@ export class Evaluator { * @returns {date} 新的日期对象 */ fnSTARTOF(date: Date, unit?: any) { - return moment(date) + return moment(this.normalizeDate(date)) .startOf(unit || 'day') .toDate(); } @@ -1596,7 +1616,7 @@ export class Evaluator { * @returns {date} 新的日期对象 */ fnENDOF(date: Date, unit?: any) { - return moment(date) + return moment(this.normalizeDate(date)) .endOf(unit || 'day') .toDate(); }