剑道:如何从 OdataString 中排除时间部分

问题描述

我正在使用 toOdataString 方法将 filterExpression 转换为 OdataString。当字段为日期类型时,时间也会被包含在内。

用户选择某个日期时,比如 08-april-2021 在转换为 odataString 的同时,它还会添加时间部分。

单位日期 eq 2021-04-08T00:00:00.000Z

用于复制的 Stackblitz:https://stackblitz.com/edit/angular-ivy-dzo3tn?file=src%2Fapp%2Fapp.ccomponent.ts

注意:在控制台中检查输出

可以像 $filter=date(unitdate) eq 2021-04-08 那样创建吗??

参考:https://github.com/OData/WebApi/issues/1473

解决方法

您实际上需要删除日期的 TimeZone 部分。请检查以下代码:

let queryStr = `${toODataString(state)}`;
const regex = /T00:00:00\.000Z/gi;
const noTimeZoneQueryStr = queryStr.replace(regex,'');
console.log("noTimeZoneQueryStr",noTimeZoneQueryStr);

请在此处找到更新的 Stackblitz:https://stackblitz.com/edit/angular-ivy-w7m4kd?file=src%2Fapp%2Fapp.ccomponent.ts

编辑关于注释:是的。请考虑以下代码:

let queryStr = `${toODataString(state)}`;
const dateStr = /(r=| )Units Date /g;
let newQueryStr = queryStr.replace(dateStr,'$1date(Units Date) ');
const regex = /T00:00:00\.000Z/gi;
const noTimeZoneQueryStr = newQueryStr.replace(regex,noTimeZoneQueryStr);

请在此处找到更新的 Stackblitz:https://stackblitz.com/edit/angular-ivy-jqma46?file=src%2Fapp%2Fapp.ccomponent.ts