我想知道下周一或周四的日期(如果是周一或周四,则为今天)。由于Moment.js在星期日 - 星期六的范围内工作,我必须在当天计算并根据该计算下一个星期一或星期四:
if (moment().format("dddd")=="Sunday") { var nextDay = moment().day(1); }
if (moment().format("dddd")=="Monday") { var nextDay = moment().day(1); }
if (moment().format("dddd")=="Tuesday") { var nextDay = moment().day(4); }
if (moment().format("dddd")=="Wednesday") { var nextDay = moment().day(4); }
if (moment().format("dddd")=="Thursday") { var nextDay = moment().day(4); }
if (moment().format("dddd")=="Friday") { var nextDay = moment(.day(8); }
if (moment().format("dddd")=="Saturday") { var nextDay = moment().day(8); }
这很有效,但肯定有更好的方法!
答案 0 :(得分:63)
这里的诀窍不在于使用Moment从今天起到特定的一天。它概括了它,所以你可以随时使用它,无论你在哪一周。
首先,你需要知道你在一周中的位置:moment.day()
,或稍微更可预测(尽管有语言环境)moment().isoWeekday()
。
使用它来了解今天的日期是否比您想要的日期更小或更大。如果它更小/相等,你可以简单地使用本周的星期一或星期四的实例......
const dayINeed = 4; // for Thursday
const today = moment().isoWeekday();
if (today <= dayINeed) {
return moment().isoWeekday(dayINeed);
}
但是,如果今天比我们想要的那天还要大,那么你想在下周的同一天使用:“下周一的星期一”,无论你在当周的哪个地方。简而言之,您希望首先使用moment().add(1, 'weeks')
进入下周。下周后,您可以使用moment().day(1)
选择所需的日期。
在一起:
const dayINeed = 4; // for Thursday
const today = moment().isoWeekday();
// if we haven't yet passed the day of the week that I need:
if (today <= 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 same day
return moment().add(1, 'weeks').isoWeekday(dayINeed);
}
答案 1 :(得分:10)
b
会给你一个引用day_of_week的数字。
甚至更好:moment().day()
和moment().day(1 + 7)
将分别在下周一,下周四给你。
答案 2 :(得分:9)
以下内容可用于从现在(或任何日期)获取下一个工作日日期
var weekDayToFind = moment().day('Monday').weekday(); //change to searched day name
var searchDate = moment(); //now or change to any date
while (searchDate.weekday() !== weekDayToFind){
searchDate.add(1, 'day');
}
答案 3 :(得分:8)
使用时刻获得下一个星期一
moment().startOf('isoWeek').add(1, 'week');
答案 4 :(得分:2)
恕我直言更优雅的方式:
var setDays = [ 1, 1, 4, 4, 4, 8, 8 ],
nextDay = moment().day( setDays[moment().day()] );
答案 5 :(得分:1)
这是例如下周一:
var chosenWeekday = 1 // Monday
var nextChosenWeekday = chosenWeekday < moment().weekday() ? moment().weekday(chosenWeekday + 7) : moment().weekday(chosenWeekday)
答案 6 :(得分:0)
以下是寻找下周一的解决方案,如果是周一,则为今天:
const dayOfWeek = moment().day('monday').hour(0).minute(0).second(0);
const endOfToday = moment().hour(23).minute(59).second(59);
if(dayOfWeek.isBefore(endOfToday)) {
dayOfWeek.add(1, 'weeks');
}
答案 7 :(得分:0)
这个想法类似于XML的想法,但是通过简单地将缺少的日期添加到当前日期来避免了 if / else 语句。
const desiredWeekday = 4; // Thursday
const currentWeekday = moment().isoWeekday();
const missingDays = ((desiredWeekday - currentWeekday) + 7) % 7;
const nextThursday = moment().add(missingDays, "days");
我们只能通过确保添加的天数介于0到6之间来“走向未来”。
答案 8 :(得分:0)
这些答案大多数都无法解决OP的问题。 Andrejs Kuzmins'是最好的,但我会对其进行一些改进,以便该算法考虑区域设置。
var nextMoOrTh = moment().isoWeekday([1,4,4,4,8,8,8][moment().isoWeekday()-1]);
答案 9 :(得分:0)
下周一或其他任何一天
moment().startOf('isoWeek').add(1, 'week').day("monday");