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