0

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

4

1 回答 1

0

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

日历

你认为第三天是第一周还是第二周?

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

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 库

这里有一些结果:

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
于 2019-02-02T20:00:13.663 回答