Как найти воскресенье 9 недель назад, независимо от того, какой день недели сегодня использует JavaScript

#javascript #react-dates

#javascript #реагирующие даты

Вопрос:

Надеюсь, кто-нибудь сможет мне помочь. Я пытаюсь написать функцию для поиска воскресенья 9 недель назад, независимо от того, какой день недели сегодня использует javascript.
Я пробовал с помощью moment().day(-56), но он не работает. Любым другим способом мы можем это сделать?

Ответ №1:

Если вы решите использовать только собственный JS, это может удовлетворить ваши потребности.

 <script>
 var today = new Date();
 // today.getDay() is current day-of-week (0=Sun ... 6=Sat)
 var lastSun9wksAgo = new Date(today.getFullYear(), today.getMonth(), today.getDate()-(9*7 today.getDay()));
 // alter display for 9 weeks ago with day-of-week offset
 alert(lastSun9wksAgo.toDateString());
</script>
  

Может быть помещен в двухстрочную функцию, если используется повторно, например:

     <script>
function sundayPriorWeeks(weeks) {
  var today = new Date();
  // today.getDay() is current day-of-week (0=Sun ... 6=Sat)
  var lastSun9wksAgo = new Date(today.getFullYear(), today.getMonth(), today.getDate()-(9*7 today.getDay()));
  // alter display for # weeks ago with day-of-week offset
  return lastSun9wksAgo;
}
alert(sundayPriorWeeks(9).toDateString());
</script>
  

Ответ №2:

Это то, что вы ищете?

 console.log(moment().startOf('week').subtract(9,'weeks').format("MM-DD-yyyy"))
  

Воскресенье — это начало недели, поэтому мы идем туда, чтобы найти базовую линию. Затем вычтите оттуда 9 недель, используя функцию вычитания Momentjs. Отформатирован для удобного вывода.

Ответ №3:

Согласно https://momentjscom.readthedocs.io/en/latest/moment/02-get-set/06-day / вы можете получить 9 воскресений назад с:

 moment().day(-63)
  

Ответ №4:

Я думаю, вам нужно рассчитать неделю и день недели отдельно. Попробуйте что-то вроде этого: https://codepen.io/kevinashworth/pen/bGeGjGx

 var thisWeek = moment().week()
var theSunday = moment().week(thisWeek - 9).weekday(0).format("dddd, MMMM Do, YYYY")
  

Комментарии:

1. Однако это зависит от локали. Воскресенье может не быть 0 в вашем регионе. Смотрите momentjs.com/docs/#/get-set/weekday

Ответ №5:

Я предполагаю, что вам нужно найти первое воскресенье 9 недель назад, так что, возможно, приведенные ниже функции помогут.

 const findNineWeeksAgo = () => {
  let nineWeeksAgo = new Date('August 19, 1975 23:15:30')
  const nineWeeksInDays = 63

  // You can modify a date using setDate. It automatically corrects for shifting to new months/years etc.
  nineWeeksAgo.setDate(nineWeeksAgo.getDate() - nineWeeksInDays);

  return nineWeeksAgo
}

const findNextSunday = () => {
  const dateNineWeeksAgo = findNineWeeksAgo()
  // getting the exact day of the week that was 9 weeks ago
  let dayNineWeeksAgoe = dateNineWeeksAgo.getDay()
  // if the exact day is sunday i.e 0 return that date in string format else find number of days to sunday add them to the exact date and reurn that.
  if (dayNineWeeksAgoe === 0) return dayNineWeeksAgoe.toString()
  else {
    let daysLeftToSunday = 7 - dayNineWeeksAgoe
    dateNineWeeksAgo.setDate(dateNineWeeksAgo.getDate()   daysLeftToSunday);
    return dateNineWeeksAgo.toString()
  }
}

console.log(findNextSunday())