Момент, превращающий день ул в момент, только день и время - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь преобразовать строку «Ср., 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 (два дня, среда, с этого момента)

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Я думаю, что ваш вопрос нужно разделить на несколько шагов, а ваше требование не очень понятно.

Здесь я выполнил следующие шаги:

  1. Разделите ваш ввод на «Ср» и «11: 45 вечера».

  2. Используйте 'Wed', чтобы вычислить наступающую среду (если сегодня среда, тогда наступающая среда все еще будет сегодня или следующей средой)

  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

0 голосов
/ 24 сентября 2019

Попробуйте

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