问题描述
假设我有第43周,到2020年
我如何获得这样的输出结果
dates = ['Monday,October 19,2020','Tuesday,October 20,'Wednesday,October 21,'Thursday,October 22,'Friday,October 23,'Saturday,October 24,'Sunday,]
我已经尝试过了,但是它给了我星期天到星期六,这导致第43周的日期范围不正确:
function getDateOfWeek(w,y) {
var simple = new Date(y,1 + (w - 1) * 7);
var dow = simple.getDay();
var ISOweekStart = simple;
if (dow <= 4)
ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);
else
ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());
const temp = {
d: ISOweekStart.getDate(),m: ISOweekStart.getMonth(),y: ISOweekStart.getFullYear(),}
const numDaysInMonth = new Date(temp.y,temp.m + 1,0).getDate()
return Array.from({
length: 7
},_ => {
if (temp.d > numDaysInMonth) {
temp.m += 1;
temp.d = 1;
}
return new Date(temp.y,temp.m,temp.d++).toUTCString()
});
}
console.log(getDateOfWeek(43,2020));
解决方法
如@Jamiec所建议。通过使用momentjs,可以简化所有使用本地javascript日期的麻烦
df$date <- as.Date(NA)
x1 <- grepl('^\\d+$',df$A)
x2 <- grepl('\\d+-\\d+-\\d+',df$A)
df$date[x1] <- as.Date(as.numeric(df$A[x1]),origin = "1899-12-30")
df$date[x2] <- as.Date(df$A[x2])
df %>% group_by(id) %>% fill(date,.direction = 'updown')
以上代码将返回从星期一到星期天的日期数组