如何在Contentful GraphQL API中查询未过期的活动?
解决Contentful GraphQL API查询未过期活动的问题
你遇到的问题核心是操作符使用错误,以及对Contentful日期字符串比较逻辑的误解。以下是具体可行的解决方案:
1. 修正操作符逻辑
你要查询尚未过期的活动,意味着活动的结束日期eventEndDate需要晚于目标时间(比如你指定的2022-10-27),所以应该使用gt(大于)操作符,而非lt(小于)。原查询用lt会筛选出已过期的活动,自然匹配不到示例中11月结束的活动。
修正后的查询示例:
eventCollection(where: {eventEndDate: {gt: "2022-10-27T00:00:00.000-06:00"}}) { items { slug eventEndDate } }
2. 确保日期格式匹配
Contentful返回的日期是标准ISO 8601格式(带时区信息),这种格式的字符串可直接通过字典序进行大小比较,只要你查询的日期字符串和字段格式完全一致(包括时区部分),比较就会生效。如果不想处理时区差异,可统一使用UTC时间(比如将2022-10-27T00:00:00.000-06:00转换为2022-10-27T06:00:00.000Z)。
3. 使用动态当前时间过滤
如果要基于查询时的当前时间筛选未过期活动,可直接使用Contentful GraphQL API内置的now()函数,无需手动输入固定日期:
eventCollection(where: {eventEndDate: {gt: now()}}) { items { slug eventEndDate } }
这个查询会自动获取当前服务器时间,返回所有结束时间在当前时间之后的活动。
内容的提问来源于stack exchange,提问作者testcoder101
相关产品推荐
相关产品推荐

