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 管先飛 閱讀(1613) 評論(0)  編輯  收藏 所屬分類: Lotus Notes
          主站蜘蛛池模板: 阿巴嘎旗| 额济纳旗| 繁峙县| 内丘县| 台南市| 西林县| 毕节市| 巍山| 萝北县| 长岛县| 桑植县| 冕宁县| 陇南市| 游戏| 丹凤县| 麻阳| 石渠县| 紫金县| 万州区| 新津县| 广饶县| 高淳县| 吉木乃县| 改则县| 威远县| 赣榆县| 曲水县| 东兰县| 宿迁市| 崇信县| 汝南县| 新竹县| 通许县| 勐海县| 龙江县| 临武县| 大竹县| 永登县| 天祝| 阿勒泰市| 丹东市|