说我给了一个约会,从那里我可以得到它的一天和一周中的哪一天。例如(在Javascript中):
var d = new Date(1316038581772); // Wed Sep 14 2011 12:16:21 GMT-1000
var dayOfWeek = d.getDay(); // 3 - Wednesday
var dayOfMonth = d.getDate(); // 14 - Day of month
我正在寻找值n
,以便此日期是该月中某一周的n
天。在这种情况下,我正在寻找2011年9月第二个星期三的n=2
。
天真的算法是找到该月中该工作日的第一次出现,取天数之差,除以7,但这不是恒定的时间。例如,我需要从9月的第一天开始每天迭代7次到达第一个星期三。
这个问题是否有恒定时间的解决方案?
(对于任何感兴趣的人,我正在尝试为iCalendar重复规则生成序数值;给定日期,生成每月n
天的每月重复。此案例的规则将是像
RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=WE;BYSETPOS=2
或
RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=2WE
)
答案 0 :(得分:2)
除以7并向上舍入。
第14个月总是本月的第2个[工作日],第15个月总是第3个[工作日]等等。
答案 1 :(得分:1)
取月份的日期,加6,除以7,扔掉其余部分。
答案 2 :(得分:1)
您需要两个功能 - 一个用于获取日信息,另一个用于获取第n个信息。
Number.prototype.nth= function(){
var n= Math.round(this), t= Math.abs(n%100), i= t%10;
if(i<4 && (t<4 || t> 20)){
switch(i){
case 1:return n+'st';
case 2:return n+'nd';
case 3:return n+'rd';
}
}
return n+'th';
}
Date.prototype.nthofMonth= function(){
var today= this.getDate(),m=this.getMonth(),
day= ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday'][this.getDay()],
month= ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'][m];
return [(m+1)+'-'+today,'the ', (Math.ceil((today)/7)).nth(), day, 'of', month, 'in', this.getFullYear()].join(' ');
}