时刻将一天转换为只有日期和时间的时刻



我正在尝试将字符串"星期三,晚上 11:45"转换为正确的日期时间(最好是 UTC(。是否可以不需要月份?正确的日期时间是即将到来的星期三。今天是星期一(23日(,所以星期三将是25日。

const time = 'Wed, 11:45 pm'
const datetime = moment(time).utc() // yields 2019-09-23T05:00:00Z (todays date)

我需要它产生 2019-09-25T22:25:58Z(两天,星期三,从现在开始(

我认为您的问题必须分为几个步骤,并且您的要求不是很清楚。

我在这里所做的步骤是

  1. 将您的输入拆分为"星期三"和"晚上 11:45"。

  2. 使用"星期三"计算即将到来的星期三(如果今天是星期三,那么即将到来的星期三仍然是今天或下一个星期三(

  3. 将 11:45 设置为小时和分钟。

  4. 将其更改为您喜欢的格式。

我看到你的标签有柏树,所以我用上面的功能写了一个柏树测试。

describe('Find the coming Wednesday', () => {
it('test',()=>{
cy.visit('https://www.google.com');
const time = "Wed, 11:45 pm";
var returnedDatetime = findComingDate(time);
const outputDatetime = Cypress.moment(returnedDatetime).utc().format();
console.log(outputDatetime);
})
})

function findComingDate(dayAndTime) {
//split your string
var dayAndTime = dayAndTime.split(',');
var day = dayAndTime[0];
var time = dayAndTime[1];
var parts = time.match(/(d+):(d+) (am|pm)/);
if (parts) {
var hours = parseInt(parts[1]),
minutes = parseInt(parts[2]),
tt = parts[3];
}
if (tt === 'pm' && hours < 12) hours += 12;
var days = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'];
var dayindex = days.indexOf(day) + 1;
if (dayindex === 0) {
throw ('You can only input 3 letters for the day name')
}
else {
var cd = new Date();
//use commented code below if today is tuesady and your input is tuesday and you want output is today.  
cd.setDate(cd.getDate() + ((7-cd.getDay())%7+dayindex)%7);
//use commented code below if today is tuesady and your input is tuesday and you want output is next tuesday. 
//cd.setDate(cd.getDate() + (7-cd.getDay())%7+dayindex)
//change the time 
cd.setHours(hours,minutes,0,0);
return cd;
}
}

我在 2019 年 9 月 24 日用您的输入"星期三,晚上 11:45"对其进行了测试,它返回 UTC 时间 2019-09-24T11:45:00Z

尝试

moment('Wed, 11:45 pm', 'ddd HH:mm a')

最新更新