瞬间将日期转换为仅包含日期和时间的时刻

时间:2019-09-23 22:25:11

标签: javascript momentjs cypress

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

$items = Session::get('items');
$deco = json_decode($items, true);

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

2 个答案:

答案 0 :(得分:1)

我认为您的问题必须分为几个步骤,您的要求不是很明确。

我在这里所做的步骤是

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

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

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

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

我看到您的标签有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;
    }
}

我在2019年9月24日用您的输入'Wed,11:45 pm'测试了它返回UTC时间 2019-09-24T11:45:00Z

答案 1 :(得分:-1)

尝试

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