赛普拉斯的时间比较
Time comparison in Cypress
当我需要检查上午 11 点是下午 1 点之前 2 小时时出现问题,因为我的代码将差异设为 10。(11 对 1)因为我们有 12 小时的时间。
const lines2 = text.split('\n');
const lines8 = text.split(' ');
const lines9 = text.split(':', 1); // here is where I split it only to hour.
//same for second time
const lines4 = text.split(':', 1);
var fromtime = dayjs().hour(lines4)
var totime = dayjs().hour(lines9)
const timedifference = (totime.diff(fromtime, "hours",));
expect(timedifference).to.equal(//value taken from another file, for example -2)
我注意到您有 dayjs
库。要处理各种解析字符串,请添加 customParseFormat
插件。
import dayjs from 'dayjs'
import customParseFormat from 'dayjs/plugin/customParseFormat'
dayjs.extend(customParseFormat)
您的日期字符串作为第一个参数传递到 dayjs(dateString, format)
,并作为第二个参数格式化。
.hours()
方法没有参数,它只提取小时部分。
我不确定你的格式到底是什么,所以这里有几个例子。
我已经排列好日期字符串和格式,这样您就可以看到模式了。
// "Standard" format
const dateString1 = '2022-05-14 10:12:54'
const date1 = dayjs(dateString1, 'YYYY-MM-DD HH:mm:ss')
const hours1 = date1.hour()
console.log(hours1) // logs 10
// Dates with time in "10:12:54 AM" format
const dateString2 = '2022-05-14 10:12:54 AM'
const date2 = dayjs(dateString2, 'YYYY-MM-DD HH:mm:ss A')
const hours2 = date2.hour()
console.log(hours2) // logs 10
const dateString3 = '2022-05-14 1:12:54 PM'
const date3 = dayjs(dateString3, 'YYYY-MM-DD HH:mm:ss A')
const hours3 = date3.hour()
console.log(hours3) // logs 13
// Dates with time in "10AM" format
const dateString4 = '2022-05-14 10AM'
const date4 = dayjs(dateString4, 'YYYY-MM-DD HHA')
const hours4 = date4.hour()
console.log(hours4) // logs 10
const dateString5 = '2022-05-14 1PM'
const date5 = dayjs(dateString5, 'YYYY-MM-DD HHA')
const hours5 = date5.hour()
console.log(hours5) // logs 13
// Time-only strings
const timeString6 = '10:12:54 AM'
const date6 = dayjs(timeString6, 'HH:mm:ss A')
const hours6 = date6.hour()
console.log(hours6) // logs 10
const timeString7 = '1:12:54 PM'
const date7 = dayjs(timeString7, 'HH:mm:ss A')
const hours7 = date7.hour()
console.log(hours7) // logs 13
完整的格式列表是 here
我无法从你的代码中找出 fixture 文件的布局。
一般来说,不要尝试写入和读取中间值,这对您没有帮助。
如果你能控制fixture文件的格式,你应该用逗号分隔fromDate
和toDate
,可以用来分割行
例如,cypress/fixtures/dates.txt
2022-05-14 10:12:54 AM, 2022-05-14 1:12:54 PM
... etc
测试:
cy.readFile('cypress/fixtures/dates.txt').then((dates) => {
const lines = dates.split('\n')
lines.forEach(line => {
const fromDateString = line.split(',')[0].trim()
const toDateString = line.split(',')[1].trim()
const fromDate = dayjs(fromDateString, 'YYYY-MM-DD HH:mm:ss A')
const toDate = dayjs(toDateString, 'YYYY-MM-DD HH:mm:ss A')
const timeDifference = toDate.diff(fromDate, "hour")
expect(timeDifference).to.equal(expectedDifference)
})
})
注:toDate.diff(fromDate, "hour")
会产生正的差异。
要与负差异进行比较,请使用反向
fromDate.diff(toDate, "hour")
当我需要检查上午 11 点是下午 1 点之前 2 小时时出现问题,因为我的代码将差异设为 10。(11 对 1)因为我们有 12 小时的时间。
const lines2 = text.split('\n');
const lines8 = text.split(' ');
const lines9 = text.split(':', 1); // here is where I split it only to hour.
//same for second time
const lines4 = text.split(':', 1);
var fromtime = dayjs().hour(lines4)
var totime = dayjs().hour(lines9)
const timedifference = (totime.diff(fromtime, "hours",));
expect(timedifference).to.equal(//value taken from another file, for example -2)
我注意到您有 dayjs
库。要处理各种解析字符串,请添加 customParseFormat
插件。
import dayjs from 'dayjs'
import customParseFormat from 'dayjs/plugin/customParseFormat'
dayjs.extend(customParseFormat)
您的日期字符串作为第一个参数传递到 dayjs(dateString, format)
,并作为第二个参数格式化。
.hours()
方法没有参数,它只提取小时部分。
我不确定你的格式到底是什么,所以这里有几个例子。
我已经排列好日期字符串和格式,这样您就可以看到模式了。
// "Standard" format
const dateString1 = '2022-05-14 10:12:54'
const date1 = dayjs(dateString1, 'YYYY-MM-DD HH:mm:ss')
const hours1 = date1.hour()
console.log(hours1) // logs 10
// Dates with time in "10:12:54 AM" format
const dateString2 = '2022-05-14 10:12:54 AM'
const date2 = dayjs(dateString2, 'YYYY-MM-DD HH:mm:ss A')
const hours2 = date2.hour()
console.log(hours2) // logs 10
const dateString3 = '2022-05-14 1:12:54 PM'
const date3 = dayjs(dateString3, 'YYYY-MM-DD HH:mm:ss A')
const hours3 = date3.hour()
console.log(hours3) // logs 13
// Dates with time in "10AM" format
const dateString4 = '2022-05-14 10AM'
const date4 = dayjs(dateString4, 'YYYY-MM-DD HHA')
const hours4 = date4.hour()
console.log(hours4) // logs 10
const dateString5 = '2022-05-14 1PM'
const date5 = dayjs(dateString5, 'YYYY-MM-DD HHA')
const hours5 = date5.hour()
console.log(hours5) // logs 13
// Time-only strings
const timeString6 = '10:12:54 AM'
const date6 = dayjs(timeString6, 'HH:mm:ss A')
const hours6 = date6.hour()
console.log(hours6) // logs 10
const timeString7 = '1:12:54 PM'
const date7 = dayjs(timeString7, 'HH:mm:ss A')
const hours7 = date7.hour()
console.log(hours7) // logs 13
完整的格式列表是 here
我无法从你的代码中找出 fixture 文件的布局。
一般来说,不要尝试写入和读取中间值,这对您没有帮助。
如果你能控制fixture文件的格式,你应该用逗号分隔fromDate
和toDate
,可以用来分割行
例如,cypress/fixtures/dates.txt
2022-05-14 10:12:54 AM, 2022-05-14 1:12:54 PM
... etc
测试:
cy.readFile('cypress/fixtures/dates.txt').then((dates) => {
const lines = dates.split('\n')
lines.forEach(line => {
const fromDateString = line.split(',')[0].trim()
const toDateString = line.split(',')[1].trim()
const fromDate = dayjs(fromDateString, 'YYYY-MM-DD HH:mm:ss A')
const toDate = dayjs(toDateString, 'YYYY-MM-DD HH:mm:ss A')
const timeDifference = toDate.diff(fromDate, "hour")
expect(timeDifference).to.equal(expectedDifference)
})
})
注:toDate.diff(fromDate, "hour")
会产生正的差异。
要与负差异进行比较,请使用反向
fromDate.diff(toDate, "hour")