zoukankan      html  css  js  c++  java
  • JS日历,可获得指定日期周数及星期几

    需求来自一个朋友:编写一个简易日历。在文本框中输入要查找的日期,程序可以计算出这一天处在该年份的第几周,并且能判断出这一天到底是星期几。

    应为要有交互,选择了Js来实现,也算是 结对编程 的初试吧。 我将显示部分用html 写好,点击的按钮触发事件函数是check();

    function onCheck(){ 
    var Year = document.getElementById("year").value; //获取文本框的“年” var theYear =Year * 1; //转换为number类型 //alert(theYear); // 获取月值 
    var month = document.getElementById("month"); 
    var index1=month.selectedIndex; var theMonth = month.options[index1].value; //获取月值 
    var day = document.getElementById("day"); 
    var index2=day.selectedIndex; 
    var theDay = day.options[index2].value;
    
    // 输入值判断部分
    ...
    //调用核心函数
    days(theYear,theMonth,theDay); 
    }

    核心函数days如下: 

    function days(year,month,day) { 
        var days = 0;  //表示改日期为当年的第几天
        //累加月天数
        for(var i = 1; i < month; i++ ){
        switch(i){
        //大月的情况加31
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:{
        days += 31;
        break;
        }
        //小月的情况加30
        case 4:
        case 6:
        case 9:
        case 11:{
        days += 30;
        break;
        }
        //二月的情况,根据年类型来加
        case 2:{
            if(isLeapYear(year)){
            days += 29; //闰年加29
            }
            else {
            days += 28;
            }
        break;
        }
        }
    }
          day = day * 1;
          days += day;  //月天数之和加上日天数
    
        var date0 = new Date(year,0,1);   //当年的第一天是周几
    //   alert(date0.getDay());
        var date1 = new Date(year,month-1,day); //将日期值格式化,0-11代表1月-12月;
    //   alert((days + date0.getDay()+6)/7);
        var nthOfWeek = Math.floor((days + date0.getDay()+6)/7);  //向下取整
    //   alert(nthOfWeek);
        var toDay = new Array("星期天","星期一","星期二","星期三","星期四","星期五","星期六"); 
        //day.getDay();根据Date返一个星期中的某其中0为星期日 
        alert("该日期是一年中的第"+days+"天
    "+"     是第"+nthOfWeek+"周的"+toDay[date1.getDay()]);
    }
    View Code

    调试过程中遇到了许多意外的错误,如类型的不匹配带来的计算错误,如数字的舍入问题;
    在队友的协助下,他负责审核和协助抓虫子,我负责实施和编码;
    在最后一个环节,对输入值的测试中,我们很好的相互协助,分析不同的输入情况,涵盖了各种可能的意外,很快的完成了功能的完善;
    下面是对输入值的判断是否允许的代码 :

    if (isNaN(theYear)|| theYear < 0) {
      alert("输入有误,请重新输入");
      return ;
    }
    
    if((theMonth == 2 && theDay > 29 && isLeapYear(theYear))||(theMonth == 2 && theDay > 28 && !isLeapYear(theYear))) {
      alert("输入有误,请重新输入");
      return ;
    } 
    
    if((theMonth == 4 || theMonth == 6 || theMonth == 9 || theMonth == 11) && theDay == 31 ) {
      alert("输入有误,请重新输入");
      return ;
    } 
  • 相关阅读:
    程序员的人品
    【转】telnet使用 删除foxmail不能收取的邮件
    35岁以后我在干什么?
    面试
    程序员基本知识数制
    一事无成
    经过XssFilter替换特殊字符后再经zuul路由转发httpEntity缺少内容
    android跳转到市场进行评价 market://search?q
    使用IntelliJ 12.1.12开发android程序
    重定向
  • 原文地址:https://www.cnblogs.com/ranran/p/javascript_cal_week.html
Copyright © 2011-2022 走看看