在Cypress中如何校验一个日期字符串是否包含另一个指定日期?
日期校验问题解决方案
错误原因
- 两个日期字符串格式不统一,系统日期带12小时制
PM标识、小时有前导零,应用返回日期无AM/PM标识、小时无前导零,无法直接做字符串包含匹配 - 示例中的两个日期本身存在5秒的时间差,完全字符串匹配必然失败
可落地的校验方案
方案1:时间戳差值校验(最常用,适配允许时间误差的场景)
将两个日期统一转为时间戳,校验差值在业务可接受的阈值范围内即可:
// 字符串转Date对象,JS原生支持自动解析两种格式 const sysDate = new Date('11/30/2021 06:18:33 PM') const appDate = new Date('11/30/2021 6:18:38') // 示例允许最大时间差为10秒,可根据业务需求调整 expect(Math.abs(sysDate.valueOf() - appDate.valueOf())).to.be.lessThan(10 * 1000)
方案2:仅校验日期部分匹配(不需要核对时分秒的场景)
如果只要求日期一致,无需校验时间,直接提取日期片段对比即可:
const sysDateStr = '11/30/2021 06:18:33 PM' const appDateStr = '11/30/2021 6:18:38' // 取空格前的MM/DD/YYYY部分对比 expect(sysDateStr.split(' ')[0]).to.equal(appDateStr.split(' ')[0])
方案3:维度聚合校验(比如校验同分钟/同小时)
如果需要验证应用日期和系统日期属于同一分钟/同一小时,统一格式后截取对应维度对比:
const sysDate = new Date('11/30/2021 06:18:33 PM') const appDate = new Date('11/30/2021 6:18:38') // 校验是否为同一年月日时分 expect(sysDate.toLocaleString('en-US', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' })).to.equal(appDate.toLocaleString('en-US', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }))
内容的提问来源于stack exchange,提问作者avidCoder
相关产品推荐
相关产品推荐

