LotusScript代碼如下:
firstday=Evaluate(|@Weekday(@Date(| & Year(today) & |;1;1))|) '得到元旦是星期幾
test=Evaluate(|@Date(|& Year(Today) &|;1;1)|) '得到第一天
days=CInt((today-test(0))) '用當(dāng)前日期減掉第一天,計(jì)算出今年過了多少天。
jldays=days+firstday(0) '第一周不固定,所以將第一周有幾天加到距離今天的日期上
weeks=CInt(StrLeft(CStr((days+firstday(0)-1)/7),".") )+1 '取到當(dāng)前日期的周數(shù)+第一周
If(weeks>9) Then
thisyearweek=CStr(weeks)
Else
thisyearweek="0"+Cstr(weeks)
End If
thisyearweekText=Year(today) & "年第" & thisyearweek & "周"
MsgBox thisyearweekText
轉(zhuǎn)載如下:
說明一下,我這里是以星期日作為一周的開始
思路如下:
首先要計(jì)算今天離元旦相差多少天,然后除以7就得出今天離元旦多少個(gè)星期了。
這里要判斷有無余數(shù),如果有余數(shù),則把商加1,就得出今天相距元旦多少個(gè)星期了。
程序代碼
REM {獲取元旦};
yuandan := @ToTime(@Text(@Year(@Now))+"-01-01");
x:= @Integer(((@Today-yuandan)/(3600*24)+1)/7);
y:=((@Today-yuandan)/(3600*24)+1)/7;
@If(y-x>0;x+1;x)
但目前算出的只是今天相距元旦的星期數(shù),并不是真正的周次。
因?yàn)槊磕暝┎⒉欢际切瞧谌眨?006年的元旦是星期日,則本年的第一周是完整的一周(有7天)。
如果元旦不是星期日,則本年的第一周就只有(7-星期數(shù))天。
例如2005年的元旦是星期六,則本年的第一周只有1天,1月2號就是第二周的開始了。
所以如果只用上面的四行代碼,是不符合實(shí)際情況的。
而且上面的代碼還有bug,如果@Today是元旦,那會(huì)輸出0。
要計(jì)算真正的周次,就要從第二周開始算起。
第一周的天數(shù)是7減元旦的星期數(shù),
如果元旦是星期日, @Weekday(yuandan)返回1,星期一返回2。
所以星期數(shù)要減一。代碼如下:
程序代碼
yuandan := @ToTime(@Text(@Year(@Now))+"-01-01");
wd := @Weekday(yuandan);
t := 7-(wd-1);
用@Today 減元旦,再減第一周天數(shù)t,再加一,就是@Today到第二周開始的天數(shù)t1。
這里要做個(gè)判斷,
If @Today 就是第一周里的,那得出的結(jié)果t1就會(huì)是負(fù)數(shù),我們可以直接輸出@Today 所在周次是第一周。
Else 用 t1除以7,得出@Today 距離第二周有多少周。 然后加上1,就是加上第一周。就得出實(shí)際的周次了。
這里還有個(gè)需求就是,一年365天,就等于52周加1天。每年的第53周與下一年的第一周其實(shí)是同一周,
所以這里的周報(bào)只算52周,如果算到第53周,就改為下一年的第一周。
具體實(shí)現(xiàn)就是把53改為1,然后把年份那個(gè)域的值加1。
程序代碼@If(z=53;z:=1;z);
完整代碼如下:
程序代碼
REM {獲取元旦};
yuandan := @ToTime(@Text(@Year(@Now))+"-01-01");
REM {判斷元旦是否sunday,@Weekday(sunday)=1};
wd := @Weekday(yuandan);
@If(wd=1;
@Do(
x:= @Integer(((@Today-yuandan)/(3600*24)+1)/7);
y:=((@Today-yuandan)/(3600*24)+1)/7;
@If(y-x>0;x+1;x)
);
@Do(
t := 7-(wd-1);
t1 := (@Today-yuandan)/(3600*24)-t+1;
@If(t1>0;
@Do(
x:=@Integer(t1/7);
y:=t1/7;
@If(y-x>0;z:=x+2;z:=x+1);
@If(z=53;z:=1;z);
z
);
@Do(
1
))
)
)
1.計(jì)算當(dāng)天所在周從周一到周日的天數(shù)
weekstart:=@Adjust(@Today;0;0;-(@Weekday(@Today)-2);0;0;0);
weekend:=@Adjust(weekstart;0;0;6;0;0;0);
Text(weekstart)+"至"+@Text(weekend)
2.計(jì)算當(dāng)天所在周每一天的日期
星期一:
weekstart:=@Adjust(@Today;0;0;-(@Weekday(@Today)-2);0;0;0);
@Text(weekstart;"D2")
星期二:
weekstart:=@Adjust(@Today;0;0;-(@Weekday(@Today)-2);0;0;0);
week:=@Adjust(weekstart;0;0;1;0;0;0);
@Text(week;"D2")
星期三:
weekstart:=@Adjust(@Today;0;0;-(@Weekday(@Today)-2);0;0;0);
week:=@Adjust(weekstart;0;0;2;0;0;0);
@Text(week;"D2")
星期四:
weekstart:=@Adjust(@Today;0;0;-(@Weekday(@Today)-2);0;0;0);
week:=@Adjust(weekstart;0;0;3;0;0;0);
@Text(week;"D2")
星期五:
weekstart:=@Adjust(@Today;0;0;-(@Weekday(@Today)-2);0;0;0);
week:=@Adjust(weekstart;0;0;4;0;0;0);
@Text(week;"D2")
星期六:
weekstart:=@Adjust(@Today;0;0;-(@Weekday(@Today)-2);0;0;0);
week:=@Adjust(weekstart;0;0;5;0;0;0);
@Text(week;"D2")
星期天:
weekstart:=@Adjust(@Today;0;0;-(@Weekday(@Today)-2);0;0;0);
week:=@Adjust(weekstart;0;0;6;0;0;0);
@Text(week;"D2")
3.計(jì)算任意一周的周一至周日
很簡單,假設(shè)當(dāng)周為CurrentWeekNo; 任意一周為:WeekNo;要計(jì)算任意一周的周一至周日公式就是:
tmp:=CurrentWeekNo-WeekNo;
step:=2-tmp*7;
rem {任意一周的周一,得到周一,那二/三/四...就很輕松得到};
weekstart:=@Adjust(@Today;0;0;-(@Weekday(@Today)-step);0;0;0);