我正在尝试编码在给定日期后两周下降的星期四的日期。它比在给定日期添加14天更复杂。
这是因为如果在给定日期周之后的第一个星期三是开始日期,那么在星期四之后的两周后,将超过14天,其中跳过声明日期的星期四。
我认为它应该是一个使用
的JavaScript函数//变量将保存当前日期 var today = new Date();
//变量将保存当天的数字(例如星期三= 3)。 var thisDay = today.getDay();
然后我将它放在if语句中的“thisDate”变量中。
为了清楚起见,我试图以开始日期是给定变量的方式使用此代码。然后我计算了2周之后,跳过宣布日期的那一周。
答案 0 :(得分:4)
使用moment.js你可以这样做:
moment().add(2, 'weeks').startOf('isoweek').add(3, 'days');
答案 1 :(得分:1)
您可以添加14天,然后添加星期四(4)和当前星期几之间的差异。这是fiddle。
var date = new Date();
date.setDate(date.getDate() + 14 + (4 - date.getDay() + 7) % 7);
答案 2 :(得分:0)
我认为这就是你想要的。我这里有一个函数,用于计算您想要的前几周数,然后是指定数周后的一周中的目标日。
我正在使用moment.js。
在这里查看JSfiddle:https://jsfiddle.net/Ravvy/ea1u903k/1/
$(document).ready(function () {
var dateOfNextTwoThursdays = getDateAfterWeeks(2, 'Thursday');
$('#dateOfNextTwoThursdays').text(dateOfNextTwoThursdays);
function getDateAfterWeeks(numberOfWeeks, dayString) {
if (!numberOfWeeks || numberOfWeeks < 1 || !dayString)
return null;
if (dayString != 'Monday' && dayString != 'Tuesday' && dayString != 'Wednesday' && dayString != 'Thursday' && dayString != 'Friday' && dayString != 'Saturday' && dayString != 'Sunday')
return null;
var weeksFromNow = moment().add('days', numberOfWeeks * 7);
var dayOfTheWeek = weeksFromNow.format('dddd');
if (dayOfTheWeek === dayString)
return weeksFromNow;
else {
while (dayOfTheWeek != dayString) {
weeksFromNow = weeksFromNow.add('days', 1);
if (weeksFromNow.format('dddd') === dayString)
return weeksFromNow;
dayOfTheWeek = weeksFromNow.format('dddd');
}
}
}
});
答案 3 :(得分:0)
为什么不跳到下周然后循环几天(每次加一个)直到你星期四降落?
function getNextThursday(current){
if(!current){
var current = new Date();
}
var newday = new Date(current.getTime() + (86400000 * 8)); // next week plus 1 day in ms
while(newday.getDay() != 4){
newday = new Date(newday.getTime() + 86400000);
}
return newday;
}
var nextThursday = getNextThursday();
答案 4 :(得分:-1)
因此,如果您在DesiredWeekday中有所需的工作日,那么请执行此操作(jsfiddle here):
var DesiredWeekday = 4; // this is Thursday
var GivenDate = new Date();
alert(GivenDate.toString());
// This gives you the desired weekday but makes sure that it is at least two weeks after the given date
var TwoWeeksAfterNextOccurrenceOfDesiredWeekday = new Date();
TwoWeeksAfterNextOccurrenceOfDesiredWeekday.setDate(GivenDate.getDate() + (DesiredWeekday - GivenDate.getDay() + 7) % 7 + 14);
alert("two weeks after next thursday is = " + TwoWeeksAfterNextOccurrenceOfDesiredWeekday.toString());
// This gives you the desired weekday for the week after next week.
var DesiredWeekdayOfWeekAfterNextWeek = new Date();
DesiredWeekdayOfWeekAfterNextWeek.setDate(GivenDate.getDate() + DesiredWeekday - GivenDate.getDay() + 14);
alert("Thursday of Week after next is = " + DesiredWeekdayOfWeekAfterNextWeek.toString());
根据您的最新评论,您似乎想要的是这两种方法中的第一种。让我解释第一种方法的理论,因为它可以用于月度重现的事情,你想要计算这个月的第一个星期五或第三个星期二等等。
在您的情况下,您的想法是,在您给定(或输入)日期之后,您需要从下周四开始两周。所以,首先,我们必须搬到下周四。假设给定日期是星期二。要移至下周四,我们必须添加两天,即周四的工作日数(4)与您给出日期的工作日数(周二为2)之间的差异。如此简单,我们只是在给定日期添加所需工作日和给定日期工作日之间的差异。所以我们到目前为止的公式是:
Calculated Date = Given Date + (Desired weekday - Given Date's weekday)
但是,如果我们的给定日期是在所需的工作日之后,我们就会遇到问题。假设我们的给定日期是星期五,并且我们想要移动到下周四,如果我们添加该差异,则差异将是:期望的工作日(星期四:4) - 给定日期的工作日(星期五:5)。这是-1,我们不想回到上周四,我们想要进入下周四,所以我们要增加一周。这将我们带到:
Calculated Date = Given Date + (Desired weekday - Given Date's weekday + 7)
但回到我们的情况,即给定日期的工作日在所需的工作日之前。如果我们的给定日期是星期二,并且我们在此公式中添加7,我们将增加9天并且将进入下一周的星期四,而不是下周四。那么如果总数超过7,我们如何防止增加7呢?或者,如果总数超过7,我们如何取出7?答案是模数运算符:
Calculated Date = Given Date + ((Desired weekday - Given Date's weekday + 7) % 7)
在给定日期之后的第一个星期四。现在,如果你想要两个星期之后,那么就加上14,就像这样:
Calculated Date = Given Date + ((Desired weekday - Given Date's weekday + 7) % 7) + 14
或在javascript中
CalculatedDate = GivenDate.setDate(GivenDate.getDate() + (DesiredWeekday - GivenDate.getDay() + 7) % 7 + 14);