Karate框架如何获取当前日期并校验近7天/30天数据
Karate 日期获取与近7/30天数据过滤实现方案
内置能力说明
Karate 框架原生提供了日期处理相关的内置方法,不需要额外手写复杂的原生 JavaScript 日期逻辑,也不需要引入第三方依赖。
核心操作实现
获取当前日期
- 取当前UTC时间毫秒时间戳:直接调用内置属性
karate.timestamp即可 - 取指定格式的当前日期字符串:调用
karate.format()方法,例如要获取yyyy-MM-dd格式的当日日期,写法为karate.format(karate.timestamp, "yyyy-MM-dd") - 计算N天前的时间节点:直接通过时间戳做算术运算即可,单日毫秒数固定为
86400000,7天前时间戳为karate.timestamp - 7 * 86400000,30天前时间戳为karate.timestamp - 30 * 86400000,需要转成格式化日期字符串套karate.format()即可。
近7/30天条目过滤
如果接口返回的条目列表中,时间字段是毫秒级时间戳,直接用Karate内置的集合过滤方法即可,参考代码:
# 预置时间阈值 * def sevenDaysAgo = karate.timestamp - 7 * 86400000 * def thirtyDaysAgo = karate.timestamp - 30 * 86400000 # 过滤近7天条目 * def last7DaysList = response.items.filter(item => item.createTime >= sevenDaysAgo) # 过滤近30天条目 * def last30DaysList = response.items.filter(item => item.createTime >= thirtyDaysAgo)
如果返回的时间字段是格式化字符串(比如yyyy-MM-dd HH:mm:ss格式),先用karate.parse()转成时间戳再做比对即可,参考代码:
* def last7DaysList = response.items.filter(item => karate.parse(item.createTime, "yyyy-MM-dd HH:mm:ss") >= sevenDaysAgo)
注意:如果业务需要使用指定时区而非默认UTC时间,在
karate.format()、karate.parse()中传入第三个参数指定时区即可,例如东八区传入"GMT+8",不需要额外做时区偏移计算。
内容的提问来源于stack exchange,提问作者Smith Regan
相关产品推荐
相关产品推荐

