从给定的星期数和年份中获取所有日期

问题描述

假设我有第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')

以上代码将返回从星期一到星期天的日期数组