如何解决是否需要编写ngRx选择器以选择给定日期范围内的数据?
我需要编写一个选择器来选择实体数组列表数据。数据数组对象的内容为startDate和EndDate。但某些对象没有结束日期。如果-> endDate可用,我需要检查结束日期。如果结束日期为空,则该数据也应添加到地图中。 需要一些专家帮助来更正此选择器逻辑。会发出声呐的问题,还需要使用'!=='和'变量不应该被遮盖',就像太'全选'一样。
Start,End -> check Pass date between or Equal date range
The only start -> Check start date on or before the given date.
我选择日期的逻辑:
const selectReviewState =
createSelector(selectAdminFeature,(appState) => appState.ReviewState);
const {
selectAll,} = ReviewAdaptor.getSelectors();
/**
* Select all Review as an array
*/
const selectReviews = createSelector(
selectReviewState,selectAll
);
/**
*
* Select Review data with in given range,during one year period past to future
*
*/
export const selectAllReviewsDetailsModel = (planedDate: Date) => createSelector(
selectReviews,(selectAll: Reviewmodel[]) =>
selectAll.filter(date => date.startDateTime.getTime() <= planedDate.getTime() &&
(date.endDateTime != null && date.endDateTime.getTime() >= planedDate.getTime()))
);
解决方法
moment
是一个非常强大的日期库,可以使日期计算变得容易。
您可以像下面那样更新选择器
import moment from 'moment';
export const selectAllReviewsDetailsModel => createSelector(
selectReviews,(selectAll: ReviewModel[],props) => {
const { planedDate } = props;
return selectAll.filter(date =>
moment(date.startDateTime).isSameOrBefore(moment(planedDate)) &&
moment(date.endDateTime).isValid() ? moment(date.startDateTime).isSameOrAfter(moment(planedDate)) : true)
});
如果您注意到我将planedDate
作为道具传递,并且在组件方面可以使用此选择器
const result = this.store.pipe(selectAllReviewsDetailsModel,{ planedDate: '09/12/2002' })
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。