写计算第几周的函数

Posted on 2006-08-07 23:04 【青峰小寨】 阅读(1054) 评论(0)  编辑 收藏 引用 所属分类: 开源随感

   一个朋友向我请教这个问题,我当时一个反应是,“不是有几个内部函数可以解决吗”,结果我再自己想想好象很复杂,又要考虑相隔每月天数又是闰年什么的,还好幸亏没有象这样的思维写下去,不然写出来会被死去的,基于这种“压力”下(不知道是谁说的,没有压力办不成事,这回我有点相信了!),我沉默了,打开了eclipse(才学不久,想把脸打肿一下)。
  拿起笔在纸上画了画,而且是画的想blog日历格式(大概想blog想疯了),假如1日是星期,11日是星期日,中间相隔11-1+1 = 11天(这小学都会),假如1日就是第一周,那么这11日是第二周怎么来的呢?(看图一看就知道)也就是说一定跟中间相隔几个7天有关,仔细看了看这图,11日刚好排在第二行末,每行7个(又废话了),就是14/7=2,即第二周,那么答案就出来了,(相隔)11 + (星期)3 = 14除以7就是第二周,推而之,12日是15/7 加上15%7(是否有余数,有就1,没有就0),故而第三周。
  于是,我用javascript(当前在研究这,D和J一时又想不起来)语言写下了以下函数:
  
        //计算从beginDate开始计算,posDate是第几周
        function calExaWeek(beginDate, posDate)
       {
              //为了考虑周全,格式化日期时间对象
             function formatDate(date)
            {
                 return new Date(date.getFullYear(), date.getMonth(), date.getDate());
            }
 
           var msSpan = (formatDate(posDate) - formatDate(beginDate)) / (24 * 60 * 60 * 1000); //计算相隔天数
 
           var beginDay = beginDate.getDay();  //得到开始日期是星期几
 
           var temp = beginDay + msSpan;
    
           var m = Math.floor(temp / 7); 
           var n = temp % 7;
           if (n > 0)
               m = m + 1;
           /*以上这一小部分可以省略为
             var m = Math.floor(temp / 7) + (temp % 7 > 0);
           */


           return m;
      }

        例如,以下结果是第2周
        alert(calExaWeek(new Date(1970,0,1), new Date(1970,0,9)));

  我在java领域里还是小学生,不过认识java到有段时间了,《Java夜未眠》这仍记忆尤新的,那些java历史且不说,就现在eclipse虽也开始好长一段时间了,它仍是最强大的开发平台或称为环境(IDE),不说它的免费它的开源,就它的可扩展性就能锁战披沥。
  修理汽车需要拧螺丝,打开扳手工具包,试图找到合适的扳手。但是那些扳手的型号都不对,因为那个螺丝都属于公制标准的。只能使用与理想尺寸最相近的扳手。不好的做法结果是把那个螺丝弄裂了,只好去买一个专用的工具来下掉它。这个故事的精髓是:实现特定的事务永远需要使用恰当的工具。现在java使用者们都迅速迁移到eclipse上来了。
  我就以这个小小故事做为结尾吧,对于eclipse也不用多谈,各位可能都是前辈,但是还需要注意一点,语言对程序员而言永远也只能看成是工具,工具不好用了要换的,但是做为程序员不能因为换工具而气势低落被打败,其实你已经拥有了编程技巧和方法,更专业一点就是“算法”,根本就是“换汤不换药”,没有什么了不起,有药不要汤不照样治病!

2006年8月7日 22:35:47  青峰
只有注册用户登录后才能发表评论。

posts - 7, comments - 5, trackbacks - 0, articles - 4

Copyright © 【青峰小寨】