Автоматически генерировать номер недели с выбранной даты
У меня есть 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