Javascript 时刻将day str转换为仅包含日期和时间的时刻

Javascript 时刻将day str转换为仅包含日期和时间的时刻,javascript,momentjs,cypress,Javascript,Momentjs,Cypress,我正在尝试将字符串“Wed,11:45pm”转换为适当的日期时间(最好是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(两天,星期三,从现在开始)我认为你的问

我正在尝试将字符串“Wed,11:45pm”转换为适当的日期时间(最好是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(两天,星期三,从现在开始)

我认为你的问题必须分成几个步骤,你的要求不是很清楚

我在这里做的步骤是

  • 将您的输入拆分为“Wed”和“11:45 pm”

  • 使用“Wed”计算下一个星期三(如果今天是星期三,那么下一个星期三仍然是今天或下一个星期三)

  • 将11:45设置为小时和分钟

  • 将其更改为您喜欢的格式

  • 我看到你的标签上有cypress,所以我用上面的函数写了一个cypress测试

    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;
        }
    }
    
    descripe('查找即将到来的星期三',()=>{
    它('test',()=>{
    参观https://www.google.com');
    const time=“星期三晚上11:45”;
    var returnedDatetime=FindMingDate(时间);
    const outputDatetime=Cypress.moment(returnedDatetime).utc().format();
    console.log(outputDatetime);
    })
    })
    函数findMingDate(dayAndTime){
    //分开你的绳子
    var dayAndTime=dayAndTime.split(',');
    var day=dayAndTime[0];
    var时间=dayAndTime[1];
    变量部分=时间匹配(/(\d+):(\d+)(上午|下午)/;
    如有(部分){
    var小时数=parseInt(第[1]部分),
    分钟=parseInt(第[2]部分),
    tt=零件[3];
    }
    如果(tt==‘pm’&&hours<12)小时+=12;
    var days=[‘星期一’、‘星期二’、‘星期三’、‘星期五’、‘星期六’、‘星期日’];
    var dayindex=天。indexOf(天)+1;
    如果(dayindex==0){
    throw('您只能为日期名称输入3个字母')
    }
    否则{
    var cd=新日期();
    //如果今天是星期二,输入是星期二,输出是今天,请使用下面的注释代码。
    cd.setDate(cd.getDate()+((7-cd.getDay())%7+dayindex)%7);
    //如果今天是星期二,输入是星期二,输出是下星期二,请使用下面的注释代码。
    //cd.setDate(cd.getDate()+(7-cd.getDay())%7+dayindex)
    //改变时间
    cd.设定小时数(小时,分钟,0,0);
    返回光盘;
    }
    }
    
    我在2019-9-24测试了它,输入“Wed,11:45 pm”,它返回UTC时间 2019-09-24T11:45:00Z试试看

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