在Cypress中比较两个日期时如何避免日期被修改?
Cypress日期比较出现“减一天”问题的解决方法
你遇到的不是expect函数修改了日期,而是JavaScript Date对象的时区偏移问题。
当你用new Date(year, month, day)创建日期时,它会基于你的本地时区生成时间。比如你创建2022-07-22的本地日期,在UTC+8时区下,对应的UTC时间是2022-07-21T16:00:00.000Z,看起来就像“减了一天”;同理,firstDayOfMonth如果是本地时区的当月第一天,转换成UTC也可能是上个月的最后一天,导致比较结果不符合预期。
解决方法有两种:
方法1:统一使用UTC时间创建日期
创建日期时使用UTC相关方法,避免时区偏移影响:
let today = new Date(); let dateDisplayed = "22.07.2022".split('.'); // 使用UTC方法创建日期 let dateToCompare = new Date(Date.UTC( +dateDisplayed[2], +dateDisplayed[1] - 1, +dateDisplayed[0] )); // 同样用UTC方法获取当月第一天 let firstDayOfMonth = new Date(Date.UTC(today.getUTCFullYear(), today.getUTCMonth(), 1)); expect(dateToCompare).greaterThan(firstDayOfMonth);
方法2:转换为时间戳(毫秒数)比较
时间戳是从UTC时间1970-01-01开始的毫秒数,不受时区影响,直接比较数值更可靠:
let today = new Date(); let dateDisplayed = "22.07.2022".split('.'); let dateToCompare = new Date( +dateDisplayed[2], +dateDisplayed[1] - 1, +dateDisplayed[0] ); let firstDayOfMonth = new Date(today.getFullYear(), today.getMonth(), 1); // 转换为时间戳比较 expect(dateToCompare.getTime()).greaterThan(firstDayOfMonth.getTime());
这两种方法都能避免时区导致的日期偏移问题,确保比较的是你预期的日期。
内容的提问来源于stack exchange,提问作者sbmoschw
相关产品推荐
相关产品推荐

