guanxf

我的博客:http://blog.sina.com.cn/17learning

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  71 随笔 :: 1 文章 :: 41 评论 :: 0 Trackbacks
LotusScript代码如下:

 firstday=Evaluate(|@Weekday(@Date(| & Year(today) & |;1;1))|)  '得到元旦是星期几
 test=Evaluate(|@Date(|& Year(Today) &|;1;1)|)   '得到第一天
days=CInt((today-test(0)))   '用当前日期减掉第一天,计算出今年过了多少天。
jldays=days+firstday(0)   '第一周不固定,所以将第一周有几天加到距离今天的日期上 
        weeks=CInt(StrLeft(CStr((days+firstday(0)-1)/7),".") )+1   '取到当前日期的周数+第一周  
       If(weeks>9) Then 
thisyearweek=CStr(weeks)
Else 
thisyearweek="0"+Cstr(weeks)
    End If
thisyearweekText=Year(today) & "年第" & thisyearweek & "周"
MsgBox thisyearweekText

转载如下:

说明一下,我这里是以星期日作为一周的开始
思路如下:
首先要计算今天离元旦相差多少天,然后除以7就得出今天离元旦多少个星期了。
这里要判断有无余数,如果有余数,则把商加1,就得出今天相距元旦多少个星期了。
程序代码程序代码

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)

但目前算出的只是今天相距元旦的星期数,并不是真正的周次。
因为每年元旦并不都是星期日,例如2006年的元旦是星期日,则本年的第一周是完整的一周(有7天)。
如果元旦不是星期日,则本年的第一周就只有(7-星期数)天。
例如2005年的元旦是星期六,则本年的第一周只有1天,1月2号就是第二周的开始了。 
所以如果只用上面的四行代码,是不符合实际情况的。

而且上面的代码还有bug,如果@Today是元旦,那会输出0。

要计算真正的周次,就要从第二周开始算起。
第一周的天数是7减元旦的星期数,
如果元旦是星期日, @Weekday(yuandan)返回1,星期一返回2。
所以星期数要减一。代码如下:

程序代码程序代码

yuandan := @ToTime(@Text(@Year(@Now))+"-01-01"); 
wd := @Weekday(yuandan);
t := 7-(wd-1); 



用@Today 减元旦,再减第一周天数t,再加一,就是@Today到第二周开始的天数t1。
这里要做个判断,
If @Today 就是第一周里的,那得出的结果t1就会是负数,我们可以直接输出@Today 所在周次是第一周。
Else  用 t1除以7,得出@Today 距离第二周有多少周。 然后加上1,就是加上第一周。就得出实际的周次了。

这里还有个需求就是,一年365天,就等于52周加1天。每年的第53周与下一年的第一周其实是同一周,
所以这里的周报只算52周,如果算到第53周,就改为下一年的第一周。
具体实现就是把53改为1,然后把年份那个域的值加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.计算当天所在周从周一到周日的天数
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.计算当天所在周每一天的日期
星期一:
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.计算任意一周的周一至周日
很简单,假设当周为CurrentWeekNo; 任意一周为:WeekNo;要计算任意一周的周一至周日公式就是:
tmp:=CurrentWeekNo-WeekNo;
step:=2-tmp*7;
rem {任意一周的周一,得到周一,那二/三/四...就很轻松得到};
weekstart:=@Adjust(@Today;0;0;-(@Weekday(@Today)-step);0;0;0);
posted on 2012-02-20 22:36 管先飞 阅读(1575) 评论(0)  编辑  收藏 所属分类: Lotus Notes

只有注册用户登录后才能发表评论。


网站导航: