从选定日期自动生成星期数

时间:2019-02-02 19:09:44

标签: javarosa

我有一个XLSForm,用于收集调查数据。 我有日期,因此当用户选择日期时,年份将被高压灭菌并显示为“ 18,0r 19”,表示2018或2019(取决于所选日期)。月份也会从所选日期自动生成。 我想从xlsForm中的选定日期自动生成星期数 在ODK中使用? 例如当我选择2018年10月5日1-7日时。我想自动看到此信息: 年是18,月是10月,周是10月的第1周。

1 个答案:

答案 0 :(得分:0)

将有两种可能的计算。看一看日历。

calendar

你是否认为,第三天为第一周或第二周?

如果您认为它属于第一周,此功能将解决您的问题:

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
    }
}

这两个函数都接收日期字符串和日期格式。这两个函数还需要moment js library

您在这里得到了一些结果:

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