【发布时间】:2020-10-07 22:04:47
【问题描述】:
希望有人可以帮助我。我正在尝试编写一个函数来查找 9 周前的星期日,而不管今天在一周中的哪一天使用 javascript。
我尝试了 moment().day(-56) 但它不起作用。我们还有其他方法可以做到这一点吗?
【问题讨论】:
希望有人可以帮助我。我正在尝试编写一个函数来查找 9 周前的星期日,而不管今天在一周中的哪一天使用 javascript。
我尝试了 moment().day(-56) 但它不起作用。我们还有其他方法可以做到这一点吗?
【问题讨论】:
如果你选择只使用原生 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>
【讨论】:
这就是你要找的吗?
console.log(moment().startOf('week').subtract(9,'weeks').format("MM-DD-yyyy"))
星期天是一周的开始,所以我们去那里寻找基线。然后,使用 Momentjs 减法函数从那里减去 9 周。格式化以方便输出。
【讨论】:
根据https://momentjscom.readthedocs.io/en/latest/moment/02-get-set/06-day/,您可以通过以下方式获得 9 个星期日前:
moment().day(-63)
【讨论】:
我认为您需要分别计算星期和工作日。试试这样的:https://codepen.io/kevinashworth/pen/bGeGjGx
var thisWeek = moment().week()
var theSunday = moment().week(thisWeek - 9).weekday(0).format("dddd, MMMM Do, YYYY")
【讨论】:
我假设您需要找到 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())
【讨论】: