时刻 js 在给定指定工作日的情况下获取下一个日期
Moment js getting next date given specified week day
我似乎在给定特定日期的上周一时遇到了一些问题。我正在尝试使用Moment js来完成任务。显然,我可以手动完成,但奇怪的是,我目前无法使用他们网站上的文档示例.js让它工作:http://momentjs.com/docs/#/get-set/day/。
我正在尝试类似的东西:
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);
}
另请参阅:https://stackoverflow.com/a/27305748/800457
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
关键是使用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
}
}
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);
};
- 如何在不需要单击按钮的情况下获取选项的值
- 如何在没有回调的情况下获取有关元素的信息
- 在不使用sort()的情况下获取HTML LI元素的副本
- Javascript如何在不使用画布的情况下获取鼠标位置
- Javascript在没有jQuery的情况下获取X父节点
- Rails/JS-在不刷新页面的情况下获取变量
- jQuery在不刷新页面的情况下获取每个A标记的值
- 在没有jquery的情况下获取iframe中的特定内容
- AJAX/JS:是否可以在没有提交按钮和刷新页面的情况下获取输入文本的值
- 如何在不使用事件的情况下获取元素的 pageX 和 pageY
- 角度 - 在不使用 ng-repeat的情况下获取数据长度
- AngularJS:在不修改ng模型的情况下获取选择标签
- 我可以在没有对象函数调用的情况下获取(可能是计算的)属性值吗?
- 如何在选中数组复选框的情况下获取数组文本框的验证
- 索引数据库,如何在不重新加载页面的情况下获取更新的数据
- 如何在没有元素的情况下获取文件引用对象
- 如何在没有jQuery的情况下获取事件目标
- JavaScript:在没有画布的情况下获取 ImageData
- 在没有解析 JSON 的情况下获取高图表数据
- 如何在没有图像的情况下获取链接