[英]Moment js getting next date given specified week day
在给定特定日期的前一个星期一,我似乎有点问题。 我正在尝试使用 Moment js 来完成任务。 显然,我可以手动完成,但奇怪的是我无法使用他们网站上 moment.js 文档中的示例让它工作: http://momentjs.com/docs/#/get-set /天/ 。
我正在尝试类似的东西:
moment([2013, 08, 15, 15, 20]).day(-1).format('ddd, MMM DD')
这导致“两天前”日期,即 9 月 13 日而不是预期的 9 月 9 日。
有人在这里有线索吗? 谢谢。
这是它的工作原理:
moment().day(1) // this monday
moment().day(-6) // last monday, think of it as this monday - 7 days = 1 - 7 = -6
同样适用于其他方向:
moment().day(8) // next monday, or this monday + 7 days = 1 + 7 = 8
你的代码moment().day(-1)
可以解释为这个星期天 - 1 天 = 0 - 1 = -1 或这个星期六 - 7 天 = 6 - 7 = -1
接受的答案仅在您已经知道相关日期是在本周还是下周时才有效。 如果你不知道怎么办? 您只需要某个任意日期之后的下一个可用星期四?
首先,您想知道所讨论的一天比您想要的那一天小还是大。 如果它更大,你想在下周使用。 如果较小,则可以使用同一周的星期一或星期四。
const dayINeed = 4; // for Thursday
if (moment().isoWeekday() <= dayINeed) {
return moment().isoWeekday(dayINeed);
} else...
如果我们已经过了我们想要的那一天(例如,如果我们的时刻是星期五,而我们想要下一个可用的星期四),那么您需要一个解决方案,该解决方案将为您提供“我们时刻之后的一周中的星期四”,无论我们的时刻是哪一天,没有任何必要的加法/减法。 简而言之,您想先进入下一周,使用moment().add(1, 'weeks')
。 进入下一周后,您可以使用moment().day(1)
选择您想要的那一周中的任何一天。
总之,这将为您提供满足您要求的下一个可用日期,无论您的初始时刻在一周中的哪个位置:
const dayINeed = 4; // for Thursday
// if we haven't yet passed the day of the week that I need:
if (moment().isoWeekday() <= dayINeed) {
// then just give me this week's instance of that day
return moment().isoWeekday(dayINeed);
} else {
// otherwise, give me next week's instance of that day
return moment().add(1, 'weeks').isoWeekday(dayINeed);
}
我认为关键是使用day()
或isoWeekday()
可以获得当前周的日期,无论今天是一周中的哪一天。 因此,您得到的日期可能已经过去,也可能即将到来。
示例:
如果今天是星期三, moment().isoWeekday(5).format()
将返回即将到来的星期五的日期。
而moment().isoWeekday(1).format()
将返回前一个星期一。
因此,当您说您想要“上周二”的日期时,该日期可能属于当前周或前一周,具体取决于今天是哪一天。
获取最后dayOfTheWeek
的日期的可能函数是
function getDateOfPreviousDay(dayOfTheWeek) {
currentDayOfTheWeek = moment().isoWeekday();
if ( currentDayOfTheWeek >= dayOfTheWeek ) {
return moment().isoWeekday(dayOfTheWeek).format(); // a date in the current week
}
else {
return moment().add(-1,'weeks').isoWeekday(dayOfTheWeek).format(); // a date in the previous week
}
}
function nextWeekday (day, weekday) {
const current = day.day()
const days = (7 + weekday - current) % 7
return day.clone().add(days, 'd')
}
// example: get next Friday starting from 7 Oct 2019
nextWeekday(moment('2019-10-07'), 5)) // 2019-10-11
const upcomingDay = (dayIndex, format = "DD MMMM YYYY") => { if ( Number(moment().format("D")) >= Number(moment().day(dayIndex).format("D")) ) { return moment().day(7 + dayIndex).format(format); } return moment().day(dayIndex).format(format); };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.