微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否需要编写ngRx选择器以选择给定日期范围内的数据?

如何解决是否需要编写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 举报,一经查实,本站将立刻删除。