zoukankan      html  css  js  c++  java
  • Date类型

    最近写了一个calendar程序,遇到了很多问题,下面我列出一些个人认为很有意思,也值得思考的问题,供大家参考。

    注:每一个问题我给出的方法也许不是最好的方法,若有更好的方法,希望大牛来补充完善。

    问题一:给定一个日期,如何获取该月的总天数。

    方法一:hack技巧

    思路:

    var date = new Date(2017,1,0);

    变量date表示的是2017年2月第0天,也就是1月的最后一天31号,以此类推。

    代码:

            function getSumDay(date) {
                var day = new Date(date.getFullYear(), date.getMonth() + 1, 0);
                return day.getDate();
            }

    方法二:常规思路

    思路:

    从该月第一天开始+1,当日期的月份和该月不等时,记录增加的次数,这个数值就是该月的天数。

    代码:

            function getSumDay(date) {
                var dayNumber = 1; //初始化日号
                var monthNumber = date.getMonth(); //月号
                var sum = 0;
    
                //给新日期初始化
                var newDate = new Date(date.setDate(1));
    
                //只要月份相等,说明还在该月中,继续循环,直到下一个月
                for (var newMonthNumber = newDate.getMonth(); newMonthNumber == monthNumber; ++dayNumber) {
                    newDate = new Date(newDate.setDate(dayNumber));
                    newMonthNumber = newDate.getMonth();
                    ++sum;
                }
                return sum - 1;
            }

    方法三:hack方法

    思路:因为一个月没有第32天,而setDate(day)中如果传入的day大于该月的天数,那么会自动进入下一个月。

    代码:

            function getSumDay(year,month){
                return 32-new Data(year,month,32).getData();
            }
    
            alert(getSumDay(2017,2));
  • 相关阅读:
    多线程常见面试题
    Redis常见面试题总结
    ehcache缓存技术的特性
    sar 命令详解
    面试题
    BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)
    课后习题-10
    ulimit 命令详解
    课后习题-9
    netstat 命令详解
  • 原文地址:https://www.cnblogs.com/lijy/p/6284457.html
Copyright © 2011-2022 走看看