Автоматически генерировать номер недели с выбранной даты

У меня есть XLSForm, которую я использую для сбора данных опроса. У меня есть дата, поэтому, когда пользователь выбирает дату, год автоклавируется и отображается как "18, 0r 19", что означает 2018 или 2019 в зависимости от выбранной даты. месяц также автоматически генерируется из выбранной даты. Я хочу автоматически сгенерировать номер недели из выбранной даты в xlsForm для использования в ODK? например, когда я выбираю 5 1-7 октября 2018 года. Я хочу автоматически видеть это: Год - 18, Месяц - октябрь, Неделя - неделя 1 октября.

1 ответ

Будет два возможных расчета. Посмотрите на календарь.

Считаете ли вы третий день первой или второй неделей?

Если вы считаете, что он относится к первой неделе, эта функция решит вашу проблему:

function getWeekNumberTypeA(dateStr, dateFormat) {
    var date = moment(dateStr, dateFormat);
    var day = date.date()
    return Math.ceil(day / 7)
}

Но если вы считаете, что он относится ко второй неделе, то следующая функция решит вашу проблему:

function getWeekNumberTypeB(dateStr, dateFormat) {
    var date = moment(dateStr, dateFormat).toDate();
    var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);

    var dateBefore = moment(dateStr, dateFormat).toDate();
    dateBefore.setDate(1); // going to 1st of the month
    dateBefore.setHours(-1); // going to last hour before this date even started.

    var dateBeforeWeek = moment(dateBefore).week();
    var dateFirstDayWeek = moment(firstDay).week();
    var dateWeek = moment(date).week();

    if (dateFirstDayWeek == dateBeforeWeek) {
        return dateWeek - dateFirstDayWeek + 1
    } else {
        return dateWeek - dateFirstDayWeek
    }
}

Обе функции получают строку даты и формат даты. Обе функции также нуждаются в библиотеке моментов JS.

Здесь у вас есть некоторые результаты:

getWeekNumberTypeA("02-04-2019", "MM-DD-YYYY")
result: 1

getWeekNumberTypeB("02-04-2019", "MM-DD-YYYY")
result: 2

getWeekNumberTypeA("02-28-2019", "MM-DD-YYYY")
result: 4

getWeekNumberTypeB("02-28-2019", "MM-DD-YYYY")
result: 5
Другие вопросы по тегам